0

我刚刚使用 Xcode 的工具将一个项目从 MRR 移动到 ARC。我有一个像这样工作的例程:

@interface myObject 
{
    NSMutableArray* __strong myItems;
}
@property  NSMutableArray* myItems;
- (BOOL) readLegacyFormatItems;
@end



- (BOOL) readLegacyFormatItems
{
    NSMutableArray* localCopyOfMyItems = [[NSMutableArray alloc]init];
    //create objects and store them to localCopyOfMyItems

    [self setMyItems: localCopyOfMyItems]

    return TRUE;
}

这在 MRR 下运行良好,但在 ARC 下 myItems 会立即发布。我该如何纠正?

我已经阅读了 __strong 和 __weak 引用,但我还没有看到如何在这种情况下应用它们。

非常感谢大家提供任何信息!

4

1 回答 1

1

这应该工作,因为它是。但是您不再需要声明 iVar。只需使用属性。你甚至不需要合成它们。强属性将保留任何分配的对象,弱属性不会。

类名也应始终为大写。而且 - 由于您存储了一个可变数组 - 您还可以将对象直接添加到属性中。不需要另一个本地可变数组变量。

@interface MyObject 
@property (nonatomic, strong) NSMutableArray *myItems;
- (BOOL)readLegacyFormatItems;
@end


@implementation MyObject

- (BOOL) readLegacyFormatItems
{
    self.myItems = [[NSMutableArray alloc]init];

    //create objects and store them directly to self.myItems

    return TRUE;
}

@end
于 2013-07-05T23:22:22.277 回答