3
在哪种情况下,我们需要在ARC下编写__autoreleasing所有权限定符?
我正在努力完成难题。 __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。