Objective c n错误自动释放vs可为空

Objective c n错误自动释放vs可为空,objective-c,error-handling,automatic-ref-counting,Objective C,Error Handling,Automatic Ref Counting,我一直都知道这种模式是管理NSError**参数的方法(特别是BOOL返回值和NSError*\uu自动恢复*参数: -(BOOL)doSomethingWithString:(NSString*)string error:(NSError* __autoreleasing *)error { if(![string length]) { *error = [NSError blah blah]; return NO; } return Y

我一直都知道这种模式是管理
NSError**
参数的方法(特别是
BOOL
返回值和
NSError*\uu自动恢复*
参数:

-(BOOL)doSomethingWithString:(NSString*)string error:(NSError* __autoreleasing *)error {
    if(![string length]) {
        *error = [NSError blah blah];
        return NO;
    }
    return YES;
 }
要使用此方法,请遵循以下模式:

NSError* error = nil;
if([self doSomethingWithString:@"" error:&error]) {
    //great success!!
} else {
    //log error
}
现在看来,
\u自动释放
被替换为
\u可空

我从苹果官方文档中看到了这个方法:


那么,我是否简单地将所有的
\uu自动删除
替换为
\u Nullable
,在这种情况下一切都好?如果不是,管理
NSError**
参数的新模式是什么?

不,这是两件不同的事情

\uuuu autoreleasing
指定ARC的变量模式,因此它可以正确地推断如何读取和写入ARC

Nullability指定…以及参数是否可以是
nil

我认为造成这种混乱的原因是,对于间接参数(),Clang自动假定
\uu自动释放
,所以有些人只是省略了它。如果我没记错的话,情况并非总是如此

否则,您将得到
*\uuuu自动删除\uu Nullable*

但是显式并不是一件坏事!

模式是成功时返回YES或非nil对象,失败时返回NO或nil。@gnasher729我修复了我的示例…感谢您指出这一点。。。