Xcode 4 ARC重新检查错误 - “更改指针的保留/释放属性”

时间:2011-12-13 15:48:04

标签: iphone objective-c ios automatic-ref-counting

尝试通过ARC转换的重新检查,但我不确定如何解决此问题。方法和属性是不一致的,我不知道该怎么做:

- (void)getObjects:(id *)objects andKeys:(id *)keys {
     return [self.items getObjects:objects andKeys:keys];
}

@interface SoapArray : SoapObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> {
      NSMutableArray* items;
}

@property (nonatomic, retain) NSMutableArray* items;

错误:

将'__autoreleasing id *'发送到'__unsafe_unretained id *'类型的参数会更改指针的保留/释放属性

1 个答案:

答案 0 :(得分:3)

您需要更新签名以匹配新的兼容ARC的getObjects:andKeys:

- (void)getObjects:(id __unsafe_unretained [])objects andKeys:(id __unsafe_unretained [])keys;

此处的默认内存语义为__autoreleasing,但此方法返回__unsafe_unretained个对象,因此您也需要这样做。

请注意,这些是__unsafe_unretained。当您返回id数组时,它们没有应用内存管理。因此,如果self消失,这些对象也可能会(并且它们不会像weak属性那样将指针归零)。这通常是好的,你想要什么,但记住它。