Xcode 4.2 및 ARC를 사용하면 자동 생성 코드 NSManagedObject
가 속성에 대해 다음과 같이 읽히는 것을 알 수 있습니다.
@property (nonatomic, retain) NSString * someString;
1) retain
이제 strong
또는 로 대체 해서는 안됩니다.weak
됩니까?
2) 자동 생성 코드가 여전히 사용하는 이유 retain
3) 올바른 대체품은 무엇입니까? retain
이 속성 설명에서 ?
현재을 사용하여 문제를 디버깅 중이며 이것이 문제 NSFetchRequest
의 원인 일 수 있다고 생각했습니다. 생각?
답변
1) 유지는 이제 강하거나 약한 것으로 대체해서는 안됩니까?
아니요. 유지를 약한 것으로 대체 할 수 없습니다. 그들은 달라. 그리고 strong은 보유의 100 % 동의어입니다. 그들은 동일합니다. 둘 중 하나를 사용할 수 있으므로 여기에 “should”가 없습니다. 원하는 경우 유지를 strong으로 바꿀 수 있지만 반드시 그럴 필요는 없습니다.
2) 자동 생성 된 코드가 여전히 유지를 사용하는 이유
왜 안돼? (1) 참조. 유지가 정확하므로 문제가 없습니다.
3)이 재산 명세서에서 유보에 대한 올바른 대체는 무엇입니까?
유지를 교체 할 필요가 없습니다.
현재 NSFetchRequest를 사용하여 문제를 디버깅 중이며 이것이 문제의 원인 일 수 있다고 생각했습니다. 생각?
그렇지 않습니다.
답변
하나에서 세 가지 질문에 대답하려면 다음 retain
과 strong
모두가 올바른지, 그래서 서로 동의어입니다. 문서 상태
retain
__strong
소유권을 의미
strong
__strong
소유권을 의미
답변
ARC 이전에 유지되는 객체를 ‘해제’해야합니다. 즉, 보유에는 반대 부분이 있습니다. ARC 후에는 해제 할 필요가 없습니다. 따라서 강력하게 사용하십시오. 릴리스를 호출 할 필요가 없다는 시각적 단서입니다.
답변
“retain”은 “strong”과 같습니다.
예를 들어 “strong”이 사용됩니다.
@property (nonatomic, strong) NSString * someString;
예를 들어 “__strong”이 사용됩니다.
-(void) someMethod
{
__strong NSString* vStr = [[NSString alloc] initWithString:@"some string"];
}
Apple 문서에서. 말한다 :
속성 속성
다음 예제와 같이 weak 및 strong 키워드가 새로 선언 된 속성 속성으로 도입됩니다.
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
property(strong) MyClass *myObject;