我在试着完成这个拼图。
对于所有Objective-C可保留对象指针,如NSObject、NSString等,__strong
都是默认的。这是一个很强的参考资料。ARC将其与示波器末尾的-release
相平衡。
__unsafe_unretained
等同于旧的方式。它用于弱指针,而不保留可保留对象。
__weak
类似于__unsafe_unretained
,只是它是一个自动归零的弱引用,这意味着一旦被引用的对象被释放,指针就会被设置为空。这消除了悬空指针和EXC_BAD_ACCESS错误的危险。
但是__autoreleasing
到底有什么好处呢?当我需要使用这个限定词时,我很难找到实际的例子。我相信它只适用于需要指针指针的函数和方法,比如:
- (BOOL)save:(NSError**);
或
NSError *error = nil;
[database save:&error];
在ARC下,必须这样声明:
- (BOOL)save:(NSError* __autoreleasing *);
但这太模糊了,我想完全理解为什么。我找到的代码片段将__autoreleasing放在两颗星之间,这在我看来很奇怪。类型是NSError**
(指向NSError的指针指针),那么为什么要将__autoreleasing
放在星号之间,而不是简单地放在NSError**
前面呢?
此外,在其他情况下,我可能必须依赖__autoreleasing
。
https://stackoverflow.com/questions/8862023
复制相似问题