예dealloc 메서드에서 속성을 nil로 설정하면 정확히 어떻게됩니까?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
나는 가상 세터 A-의 종류가 호출 될 것 같아요. 그러나 정확히 여기서 어떻게됩니까? 왜 아니야?
예dealloc 메서드에서 속성을 nil로 설정하면 정확히 어떻게됩니까?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
나는 가상 세터 A-의 종류가 호출 될 것 같아요. 그러나 정확히 여기서 어떻게됩니까? 왜 아니야?
Nil은 null과 동일하지만 개체의 경우입니다. 그것은 어떤 물건도 의미하지 않는다.
점 구문은 [self setMyOutletProperty : nil]을 호출하는 것과 같습니다.
그래서 일부 속성에서 개체를 제거하면됩니다. 의미는 당신이 이야기하고있는 속성에 달려 있습니다.
설치 1. 속성 유형이 "복사"또는 "유지"된다
self.myOutletProperty = 닐; [myOutletProperty release]와 동일합니다.
2.If 속성 타입은, "할당"인 다음
self.myOutletProperty = 닐; 아무 일도하지 마라.
당신은 알아야한다, 그 자산은 단지 설탕이다.
예를 들면 :
@property(nonatomic, retain) NSString *myString;
, 그것은 실제로 염두에두고
한 가지를 해제 당신이 방법보다 더에서 @property를 선언 그렇다면
- (NSString*)myString {
return myString;
}
- (void)setMyString:(NSString*)newString {
if (myString != newString) {
[myString release];
myString = [newString retain];
}
}
로 변환됩니다 심지어입니다 속성을 nil로 설정해도 문제가 없지만 대신 dealloc 메서드에서 [object release]
을 호출하는 것이 좋습니다. 이렇게하면 다른 ivar (이미 공개되었을 수도 있음)를 참조하는 자체 setter 메소드를 작성하거나 해당 속성에 KVO 알림을 등록한 경우 안전합니다.
어떤 의미에서든 "가상"일 필요는 없습니다. -dealloc이 호출되면 객체는 여전히 존재합니다. –