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我修复了我的示例…感谢您指出这一点。。。