我有一个声明如下的函数:
- (void)loadWithCompletion:(MyCompletion)completion error:(NSError**)error;
该函数采用指向NSError的双指针,因此我可以向调用者报告错误。完成(可能是错误)将在调用函数后的某个时间发生。我需要将NSError **存储为属性,以便在上述时间过后我可以使用它。
@property(nonatomic, assign) NSError** error;
此属性声明给出了错误:
指向非const类型的NSError *,没有明确的所有权。
答案 0 :(得分:8)
在__autoreleasing
之间添加**
,以提供NSError*__autoreleasing* error
在Xcode 5.1中,ARC警告默认情况下打开了“输出参数上的隐式所有权类型”(以前它已关闭)。因此,对于5.1,当没有指定的所有权时,此警告开始出现。
编译器假设你想要自动释放,这通常是正确的,但作者最好考虑它并指定真正想要的东西。
通常您希望输出参数是自动释放的,类似于函数结果。调用者将获得一个自动释放的对象,如果他们想要保留所有权,则需要将其存储在一个强大的变量中。