【问题标题】:NSError __autoreleasing vs _NullableNSError __autoreleasing vs _Nullable
【发布时间】:2016-06-23 15:02:32
【问题描述】:

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

【问题讨论】:

  • 模式是成功时返回 YES 或非 nil 对象,失败时返回 NO 或 nil。
  • @gnasher729 我修正了我的例子...感谢您指出...

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


【解决方案1】:

不,这是两个不同的东西。

__autoreleasing为ARC指定了变量模式,因此可以正确推断出如何对其进行读写。

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

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

否则你最终会得到* __autoreleasing _Nullable *。 不过露骨也不是坏事!

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多