我开始思考所有内存管理的问题,但我对数组属性的使用有点困惑。如果我像这样在界面中声明属性 -
@property (nonatomic,retain) NSMutableArray *myArray;
然后在实现中综合它,我需要在创建数组时分配它吗?就像这样-
self.myArray = [[NSMutableArray alloc] init];
或者这会导致额外的保留计数吗?我应该这样做吗-
self.myArray = [NSMutableArray array];
并让 setter 进行保留?
非常感谢任何能为我澄清这一点的人!
最佳答案
在这两种情况下,您都让 setter 保留您的实例。
在这种情况下,你就过度保留了:
self.myArray = [[NSMutableArray alloc] init];
setter 执行此操作并发送分配消息。
可以通过以下方式修复此问题:
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 ,这将使您更好地了解保留计数何时增加以及何时应该释放。
关于objective-c - 数组作为属性 - 保留等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6369003/