【发布时间】:2012-05-17 13:46:24
【问题描述】:
我有一个类 RemoteImageLoader,它有一个 loadImage 方法:
- (void) loadImage: (NSString*) url setTarget:(NSData **)target;
我在这里使用了 NSData** 因为我需要间接返回 NSData* ,就像一些典型的方法一样:
- (BOOL)save:(NSError**)
由于该方法实际上会调用另一个异步方法,因此我必须将目标保存为成员变量,以便以后可以访问它。但是当我定义一个 NSData ** 成员变量时:
@interface RemoteImageLoader : NSObject
@property NSData** target;
@end
编译器抱怨“指向非常量类型 'NSData*' 的指针没有明确的所有权”。我在谷歌上做了一些搜索,但没有找到答案。谁能帮我解决这个问题?非常感谢
我已经尝试将声明替换为
@interface RemoteImageLoader : NSObject
@property NSData * __autoreleasing * target;
@end
但问题依然存在
【问题讨论】:
-
Automatic Reference Counting: Pointer to non-const type 'NSError *' with no explicit ownership 的可能副本。基本逻辑相同。哦,SO也有一个搜索栏:)
-
检查 ARC 过渡文档。我相信你的情况类似于 NSError。
-
您不需要需要间接返回
NSData。进行间接返回的唯一原因是您还需要一个 direct 返回值。当方法返回成功/失败BOOL或失败时对象/nil时,使用NSError **参数技术。你的方法没有使用它的返回值,所以你应该只返回新的NSData;这将使每个人的生活变得更简单(您和客户编码人员)。
标签: objective-c ios memory pointers automatic-ref-counting