我一直都知道这种模式是管理NSError**
参数的方式(特别是BOOL
返回值和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**
参数的新模式是什么?
答案 0 :(得分:0)
不,这些是两件不同的事情。
__autoreleasing
指定ARC的变量模式,因此它可以正确地删除如何读取和写入它。
Nullability指定......以及参数是否可以nil
。
我认为混淆是由于Clang自动假设__autoreleasing
为间接参数(http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters)这一事实造成的,所以有些人只是省略了它。如果我没记错的话,并非总是如此。
否则你最终会得到* __autoreleasing _Nullable *
。
但要明确这不是一件坏事!