我开始了解所有内存管理的内容,但是我对使用数组属性感到有些困惑。如果我在界面中声明属性,那么 -
@property (nonatomic,retain) NSMutableArray *myArray;
然后在实现中合成它,在创建数组时是否需要分配它?像这样 -
self.myArray = [[NSMutableArray alloc] init];
或者是否会导致额外的保留计数?我应该这样做 -
self.myArray = [NSMutableArray array];
让设定者做保留?
非常感谢任何能为我澄清这一点的人!
答案 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,这将让您更好地了解保留计数何时增加以及何时应该释放。