最佳答案
我在努力完成拼图。
__strong
是所有 Objective-C 可保留的对象指针(如 NSObject、 NSString 等)的默认值。这是一个强有力的参考。ARC 在作用域末端用 -release
平衡它。
__unsafe_unretained
等于旧的方法。它用于弱指针而不保留可保留的对象。
__weak
类似于 __unsafe_unretained
,只不过它是一个自动归零的弱引用,这意味着一旦被引用的对象被释放,指针就会被设置为 nil。这消除了悬空指针和 EXC _ BAD _ ACCESS 错误的危险。
但是 __autoreleasing
到底有什么好处呢?当我需要使用这个修饰语时,我很难找到实际的例子。我相信它只适用于那些需要指针的函数和方法,比如:
- (BOOL)save:(NSError**);
或者
NSError *error = nil;
[database save:&error];
根据《反腐败公约》 ,必须以下列方式宣布:
- (BOOL)save:(NSError* __autoreleasing *);
But this is too vague and I'd like to fully understand 为什么. The code snippets I find place the __autoreleasing inbetween the two stars, which looks weird to me. The type is NSError**
(a pointer-pointer to NSError), so why place __autoreleasing
inbetween the stars and not simply in front of NSError**
?
此外,可能还有其他情况下,我必须依赖于 __autoreleasing
。