我正在努力完成难题。
__strong
是所有Objective-C可保留对象指针(如NSObject,NSString等)的默认值。这是一个强大的参考。ARC -release
在范围的末尾与a 保持平衡。
__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
。