NSError __autoreleasing 与 _Nullable
NSError __autoreleasing vs _Nullable
我一直都知道这种模式是管理 NSError**
参数(特别是 BOOL
return 值和 NSError* __autoreleasing *
参数的方式:
-(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
}
现在好像把__autoreleasing
换成了_Nullable
?
我正在从官方 Apple 文档中查看此方法:https://developer.apple.com/reference/foundation/nsfilemanager/1415371-createdirectoryaturl?language=objc
那么,在这种情况下,我是否只需将所有 __autoreleasing
替换为 _Nullable
就可以了?如果不是,管理 NSError**
参数的新模式是什么?
不,这是两个不同的东西。
__autoreleasing
为ARC指定了变量模式,这样可以正确推导出对它的读写方式
可空性指定...那么参数是否可以 nil
。
我认为造成混淆的原因是 Clang 自动假定 __autoreleasing
用于间接参数 (http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters),所以有些人只是忽略了它。如果我没记错的话,情况并非总是如此。
否则你会得到 * __autoreleasing _Nullable *
。
不过说清楚也不是坏事!
我一直都知道这种模式是管理 NSError**
参数(特别是 BOOL
return 值和 NSError* __autoreleasing *
参数的方式:
-(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
}
现在好像把__autoreleasing
换成了_Nullable
?
我正在从官方 Apple 文档中查看此方法:https://developer.apple.com/reference/foundation/nsfilemanager/1415371-createdirectoryaturl?language=objc
那么,在这种情况下,我是否只需将所有 __autoreleasing
替换为 _Nullable
就可以了?如果不是,管理 NSError**
参数的新模式是什么?
不,这是两个不同的东西。
__autoreleasing
为ARC指定了变量模式,这样可以正确推导出对它的读写方式
可空性指定...那么参数是否可以 nil
。
我认为造成混淆的原因是 Clang 自动假定 __autoreleasing
用于间接参数 (http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters),所以有些人只是忽略了它。如果我没记错的话,情况并非总是如此。
否则你会得到 * __autoreleasing _Nullable *
。
不过说清楚也不是坏事!