数组作为属性 - 保留等

时间:2011-06-16 08:22:44

标签: objective-c properties nsarray retain

我开始了解所有内存管理的内容,但是我对使用数组属性感到有些困惑。如果我在界面中声明属性,那么 -

@property (nonatomic,retain) NSMutableArray *myArray;

然后在实现中合成它,在创建数组时是否需要分配它?像这样 -

self.myArray = [[NSMutableArray alloc] init];

或者是否会导致额外的保留计数?我应该这样做 -

self.myArray = [NSMutableArray array];

让设定者做保留?

非常感谢任何能为我澄清这一点的人!

1 个答案:

答案 0 :(得分:4)

在这两种情况下,你都要让setter保留你的实例。

在这种情况下,您将保持不变:

self.myArray = [[NSMutableArray alloc] init];

setter执行并发送alloc消息。

这可以通过以下方式解决:

self.myArray = [[[NSMutableArray alloc] init] autorelease];

NSMutableArray *newInstance = [[NSMutableArray alloc] init];
self.myArray = newInstance;
[newInstance release];

这很好

self.myArray = [NSMutableArray array];

但是并非每个类都有一个方便类方法来返回一个自动释放的实例。

查看Memory Management Programming Guide / Object Ownership and Disposal,这将让您更好地了解保留计数何时增加以及何时应该释放。