objective-c - 数组作为属性 - 保留等

标签 objective-c properties nsarray retain

我开始思考所有内存管理的问题,但我对数组属性的使用有点困惑。如果我像这样在界面中声明属性 -

@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/

相关文章:

ios - OCMockito stub 单例共享实例方法

ios - 移动到新 View Controller 时隐藏导航栏

ios - 在 iOS 6 中无法使用相机扫描 PDF 417 条码

objective-c - NSString 或 NSMutableString 中的字符数?

javascript - 在 c3 中有条件地添加或省略 JavaScript 属性

json - 从 JSON 字符串中的二维数组检索值

objective-c - NSArray 属性 : copy or retain?

delphi - 如何在 Delphi IDE 中更快地创建自动属性?

cocoa - NSArray 越界检查

swift - 通过快速将 NSDictionary 添加到 NSMutableArray 来更改数据