gpt4 book ai didi

objective-c - iOS __autoreleasing 常量错误

转载 作者:可可西里 更新时间:2023-11-01 05:37:55 24 4
gpt4 key购买 nike

所以我像往常一样将一个指向 NSError 对象的指针传递给一个方法。它曾经很简单:

-(BOOL)foo:(NSString *)string error:(NSError **)error

但是对于 ARC,现在是:

-(BOOL)foo:(NSString *)string error:(NSError *__autoreleasing *)error

所以如果我有一个变量:

NSError *error = nil;

并尝试:

[foo:@"a string" error:&error];

我收到错误:

Sending 'NSError const __strong*' to parameter of type 'NSError *__autoreleasing*' changes retain/release properties of pointer.

没关系,尽管我的印象是编译器会为您处理这个问题。所以我犯了错误:

__autoreleasing NSError *error = nil;

然后我收到警告:

Sending 'NSError *__autoreleasing const *' to parameter of type 'NSError *__autoreleasing*' discards qualifier

所以我真正的问题是为什么我的 NSError 是一个常量?我的下一个问题是如何解决这个问题?这是一个非常基本的情况,现在有了 ARC,我只是不确定如何处理这个问题。

最佳答案

您可以在 Apple header 中看到接口(interface)描述中不需要 __autoreleasing(即查看 NSFileManager attributesOfFileSystemForPath 的 header 文件)。所以使用:

(NSError **)

代替

(NSError *__autoreleasing *)

编辑:我有一个我正在玩的示例项目,其中启用了 ARC,而且我没有遇到任何问题:

-(BOOL)foo:(NSString *)string error:(NSError **)error
{
return YES;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

__autoreleasing NSError *err = nil;
[self foo:@"glop" error:&err];
NSLog(@"%@", err);

编译得很好。

关于objective-c - iOS __autoreleasing 常量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678528/

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