gpt4 book ai didi

objective-c - NSError __autoreleasing 与 _Nullable

转载 作者:行者123 更新时间:2023-12-03 07:38:46 24 4
gpt4 key购买 nike

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

最佳答案

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

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

可空性指定...以及参数是否可以为 nil

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

否则你会得到 * __autoreleasing _Nullable *。但明确一点也不是坏事!

关于objective-c - NSError __autoreleasing 与 _Nullable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37995354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com