1

속성을 만들고 컴파일러가 기본 ivar를 자동으로 합성 할 때 ivar에 동일한 보유 의미가 있습니까? 아니면 보유 의미가 "setter"에만 적용됩니까?합성 된 ivar의 보유 의미는 무엇입니까?

@property (nonatomic, strong) NSObject *strongObject 
@property (nonatomic, weak) NSObject *weakObject 

_strongObject = [[NSObject alloc] init]; // is this strong? 
_weakObject = [[NSObject alloc] init]; // is this weak? 

답변

1

체크 this 질문. 기본 변수는 ARC를 사용한다고 가정 할 때 속성과 동일한 의미를 갖는 것으로 보입니다. 이 같은 강한 속성에 세터을 무시할 수 :

- (void)setMyObject:(MyObject *)anObject 
{ 
    _myObject = anObject; 
} 

이 ARC는 바르 수준에서이 문제를 처리하기 때문에 (here 참조) (비 ARC에서와 같은) 당신이 전에 공개 할 필요가 없습니다.

그러나 ARC를 사용하지 않으면 (예 : 할당 및 보유) ivars에는 유효하지 않으며 속성에 대해서만 유효합니다.

+0

따라서 복사 의미가있는 직접 ivar 할당이 실제로 사본을 작성한다는 의미입니까? 이 예제를 보자 :'@property (nonatomic, copy) NSString * myString;'사용자 정의 setter는'if (_myString == nil) _myString = @ "A"; return _myString;' – Steveo

+0

흠. 이상하게 보입니다 (특히 setter의 return 문).하지만 아니요, 명시 적으로 복사해야합니다. ARC는 복사 작업이 아닌 보관 횟수를 처리합니다. – Merlevede

+0

제 잘못입니다. return 문은 거기에 없어야합니다. – Steveo