NSError __autoreleasing vs _Nullable

时间:2016-06-23 15:02:33

标签: objective-c error-handling automatic-ref-counting

我一直都知道这种模式是管理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**参数的新模式是什么?

1 个答案:

答案 0 :(得分:0)

不,这些是两件不同的事情。

__autoreleasing指定ARC的变量模式,因此它可以正确地删除如何读取和写入它。

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

我认为混淆是由于Clang自动假设__autoreleasing为间接参数(http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters)这一事实造成的,所以有些人只是省略了它。如果我没记错的话,并非总是如此。

否则你最终会得到* __autoreleasing _Nullable *。 但要明确这不是一件坏事!