如何在Objective-C中声明一个双重指针属性?

4

我有一个这样声明的函数:

- (void)loadWithCompletion:(MyCompletion)completion error:(NSError**)error;

该函数接受一个指向NSError的双重指针,以便我可以将错误报告给调用者。完成(及可能出现的错误)会在函数调用后一段时间内发生。我需要将NSError**作为属性存储,以便在上述时间过去时使用它。

@property(nonatomic, assign) NSError** error;

这个属性声明让我出现了错误:

指向非const类型NSError*的指针,没有明确的所有权。


我更喜欢在完成处理程序块签名中添加错误。- (void)loadWithCompletion:^(…, NSError *error) completion,因为这样可以让我在最相关的地方处理错误。 - vikingosegundo
1个回答

8

**之间添加__autoreleasing,以得到NSError*__autoreleasing* error

在Xcode 5.1中,默认打开了ARC警告“隐式所有权类型的输出参数”(以前为关闭状态)。因此,在5.1中,当没有指定所有权时,就会出现此警告。

编译器假设您想要自动释放,这通常是正确的,但最好让作者考虑并指定他们真正想要的内容。

通常,您希望输出参数是自动释放的,类似于函数结果。调用者将获得一个自动释放的对象,并且如果他们想要保留所有权,则需要将其存储在强变量中。


3
请说明为什么需要这个(出于教育目的) - Pwner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接