1

@property (copy) NSString *name으로 정의 된 속성이 있다고 가정 해보십시오.속성이 copy로 정의되어있는 경우 ivar에 할당 할 때 여전히 복사본이 필요합니까?

다음과 같이 정의 된 init 방법이 있다고 가정합니다.

-(instancetype) initWithName:(NSString *)name 
{ 
    self = [super init]; 
    if (self) 
    { 
     _name = [name copy]; //Do I need this copy or will ARC do it automatically? 
    } 
    return self; 
} 

내가 주석 라인의 사본이 필요하거나 ARC는 것 합성 세터에 그냥 같은 속성 선언에서 copy에 따라 그것을 처리 할 수 ​​있습니까?

답변

3

copy은 속성 인스턴스의 합성 된 setter 메서드에 적용되며 배킹 인스턴스 변수에는 적용되지 않습니다.

initWithName: 메서드에서 속성을 무시하고 인스턴스 변수에 직접 할당하므로 copy이 자동으로 적용되지 않습니다.

값이 복사되는 계약을 준수하려면 인스턴스 변수에 값을 직접 지정할 때 copy을 명시 적으로 호출해야합니다. 이 중 아무 것도 ARC (또는 MRC)와 관련이 없습니다. 그것은 당신이 부동산에 정의한 계약에 관한 것입니다.

tl; dr - 예, 게시 한 코드에 copy으로 전화해야합니다.