메서드 매개 변수를 통해 변수를 전달하여 서로 데이터를 교환하는 두 개의 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에 새로 고침했다고 가정 해 봅시다.
편집 : 여기 내 ClassX
및 ClassZ
과 관련 코드 available online입니다.
더 많은 코드가 없어도 대답하기가 어렵습니다. 마음에 떠오르는 첫 번째 질문은 다음과 같습니다. 동일한 객체에서 globalVariable을 찾고 계십니까? 실제로, 그것은 정말로 클래스의 멤버가 아니라 글로벌하게되어 있습니까? – ash
왜'globalVariable'이 속성입니까? ARC 또는 MRC를 사용하고 있습니까? – Sebastian
@ash 제 사과, 전 세계가 아닌 클래스 변수라고 생각합니다. 여기에 잘못된 용어가 사용되었을 수 있습니다. 변수가'ClassX' 헤더 파일에서'@property '로 선언된다는 것을 아는 것이 도움이 될 것입니다. 그리고 네, ARC를 사용하고 있습니다. 내 편집 내용을 확인하십시오. –