2013-09-03 2 views
1

메서드 매개 변수를 통해 변수를 전달하여 서로 데이터를 교환하는 두 개의 Objective-C 클래스가 있습니다.NULL이 아닌 값으로 설정된 후 개체가 NULL로 재설정 됨

ClassX *x = [[ClassX alloc] init]; 
[x passThisParameter:i]; 

변수가 성공적으로 passThisParameter 방법의 내부 ClassX에 의해 수신된다 예를 들어 나는 변수를 전달하는 방법을 호출 할 수 있습니다. 나는 중단 점과이를 확인하고 출력 로그인 할 수 있습니다 : (. 전 다른 방법으로하지만, 같은 클래스에서) 내가 위의 범위 classVariable 외부를 사용하려고 할 때

- (void)passThisParameter:(id)object { 
    self.classVariable = object; 
    NSLog(@"Object: %@", self.classVariable); // In the log I can see that classVariable has the same value as object does. 
} 

을 항상 NULL로 표시됩니다. classVariable이 NULL로 재설정되는 이유는 무엇입니까?

- (void)anotherMethodFromClassX { 
    NSLog(@"Class Variable: %@", self.classVariable); // This is always NULL even though the variable is never used anywhere else (except when it's set in the method above) 
} 

나는 또한 내 클래스 정의/헤더와 구현에 다양한 방법으로 설치에 변수를 시도했다 : :

  • @property (retain) id classVariable 여기는 나중에 변수를 retrieveing하고 어떻게
  • @property (strong) id classVariable
  • @property (assign) id classVariable
  • @property (nonatomic, strong) id classVariable

이 classVariable이 NULL으로 재설정되는 이유에 대한 아이디어가 있으십니까? 나는 그것을 파악할 수 없으며 Google에서 많은 것을 찾을 수 없습니다. 내 프로그래밍 용어 중 일부가 잘못 되었다면 용서해주십시오.

편집 : MRC가 아닌 ARC를 사용하고 있습니다.

편집 : 그것은 ClassX가 재 할당 내가이 NULL으로 재설정 될 수 있다는 classVariable을 설정 한 후 다시 초기화하는 것이 가능합니까? UI에 새로 고침했다고 가정 해 봅시다.

편집 : 여기 내 ClassXClassZ과 관련 코드 available online입니다.

+0

더 많은 코드가 없어도 대답하기가 어렵습니다. 마음에 떠오르는 첫 번째 질문은 다음과 같습니다. 동일한 객체에서 globalVariable을 찾고 계십니까? 실제로, 그것은 정말로 클래스의 멤버가 아니라 글로벌하게되어 있습니까? – ash

+0

왜'globalVariable'이 속성입니까? ARC 또는 MRC를 사용하고 있습니까? – Sebastian

+0

@ash 제 사과, 전 세계가 아닌 클래스 변수라고 생각합니다. 여기에 잘못된 용어가 사용되었을 수 있습니다. 변수가'ClassX' 헤더 파일에서'@property '로 선언된다는 것을 아는 것이 도움이 될 것입니다. 그리고 네, ARC를 사용하고 있습니다. 내 편집 내용을 확인하십시오. –

답변

1

모든 @property 변형은 인스턴스 변수이므로 설정중인 값은 클래스가 아닌 인스턴스에 설정됩니다. 그래서, 당신이 아무 것도하지 않을 때 x 그리고 ARC에 의해 가치가 사라지면 파괴됩니다. 다음에 ClassX의 새 인스턴스를 만들면 값이 nil이므로 깨끗하고 신선합니다. 해결 방법은 x을 유지하고 파기를 허용하지 않고 다시 사용하는 것입니다 (클래스 및 인스턴스 변수에 대해 조금 연구하면됩니다).

+0

이 작품! 인스턴스 변수 대신 클래스 변수로 변수를 생성 한 다음 매번 다시 작성하는 대신 동일한'x'를 사용하십시오! –

관련 문제