퍼즐을 풀려고합니다.
__strong
NSObject, NSString 등과 같은 모든 Objective-C 유지 가능 개체 포인터의 기본값입니다. 강력한 참조입니다. ARC -release
는 범위의 끝에서 균형을 유지합니다 .
__unsafe_unretained
옛날 방식과 같습니다. 유지 가능한 개체를 유지하지 않고 약한 포인터에 사용됩니다.
__weak
__unsafe_unretained
참조 된 객체가 할당 해제 되 자마자 포인터가 nil로 설정된다는 것을 의미하는 자동 영점 약한 참조라는 점을 제외하면 비슷 합니다. 이것은 댕글 링 포인터와 EXC_BAD_ACCESS 오류의 위험을 제거합니다.
그러나 정확히 무엇이 __autoreleasing
좋은가요? 이 한정자를 사용해야 할 때에 대한 실용적인 예를 찾는 데 어려움을 겪고 있습니다. 나는 다음과 같은 포인터 포인터를 기대하는 함수와 메서드에만 해당한다고 생각합니다.
- (BOOL)save:(NSError**);
또는
NSError *error = nil;
[database save:&error];
ARC에서 다음과 같이 선언해야합니다.
- (BOOL)save:(NSError* __autoreleasing *);
그러나 이것은 너무 모호하며 이유 를 완전히 이해하고 싶습니다 . 내가 찾은 코드 스 니펫은 두 별 사이에 __autoreleasing을 배치하는데 이상하게 보입니다. 유형은 NSError**
(NSError에 대한 포인터 포인터)이므로 왜 __autoreleasing
별 사이에 배치 하고 단순히 NSError**
?
또한 내가 의존해야하는 다른 상황이있을 수 있습니다 __autoreleasing
.