2009-04-30 2 views
0

"할당"으로 설정된 콘센트를 출시 할 필요가없는 이유는 무엇입니까?

@property (nonatomic, assign) UIView *anView; 

그러면 메모리 관리에 신경 쓸 필요가 없습니다. -dealloc 메서드에서 [anView release] 할 필요가 없습니다.

왜?

"assign"은 컴파일러에게 "이봐,이 속성은 다른 사람이 할당 한 것을 그대로 유지하지 않는다"라고 알려줍니다. 그런 다음

@synchronize anView; 

를 수행하면 컴파일러가 마침내 getter 및 setter를 만듭니다. 여기서 setter는 다음과 같이 표시 될 수 있습니다.

- (UIView*) anView { 
    return anView; 
} 

그러면 Setter는 다음과 같이 나타날 수 있습니다.

- (void) setAnView:(UIView*)newAnView { 
    anView = newAnView; 
} 

옳고 그름? 그것이 맞다면 setter는 newAnView 변수의 소유권을 주장하지 않습니다. 왜냐하면 그것은 "retain"속성이 아니기 때문입니다. 단지 그것을 가져 와서 인스턴스 변수에 할당합니다. 따라서 소유권 정책을 고려할 때 -dealloc에 ​​anView 인스턴스 변수를 공개 할 필요가 없습니다. 개체가 소유하지 않습니다. 그게 맞습니까?

답변

4

네, 기본적으로 맞습니다. 가비지 컬렉터가 꺼져 있다고 가정 해 봅시다 (그렇지 않으면 상관 없습니다).

'할당'속성을 사용하는 경우 객체를 보유하지 않았으므로 (다른 사람의 책임 임) 객체를 해제 할 필요가 없습니다.

기본적으로 약한 참조가 생성됩니다. 속성이 계속 가리키는 동안 anView가 할당 취소 될 수 있습니다. 일반적으로 객체가 아닌 원시 데이터 유형에 '할당'을 사용합니다.

+1

감사합니다. a.f.a.i.k 아이폰 OS에는 GC가 없다 ... 3.0에 대해서는 모르지만 이전 버전에서는 참고 계산 만하고있다. – Thanks

관련 문제