【问题标题】:Arrays as properties - retain, etc数组作为属性 - 保留等
【发布时间】:2011-09-16 04:12:03
【问题描述】:

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

@property (nonatomic,retain) NSMutableArray *myArray;

然后在实现中合成,创建数组的时候需要分配吗?像这样-

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

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

self.myArray = [NSMutableArray array];

然后让 setter 做保留?

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

【问题讨论】:

    标签: objective-c properties nsarray retain


    【解决方案1】:

    在这两种情况下,您都让 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,这将使您更好地了解保留计数何时增加以及何时应该释放。

    【讨论】:

    • 谢谢!出于某种原因,我忘记了自动发布的方式,尽管我曾经在直接从示例中复制代码时这样做。从积极的方面来说,我认为我必须对正在发生的事情有更基本的了解才能真正意识到存在问题!我会重新阅读指南,它现在对我来说可能意味着什么......
    • @Franklyn Weber 欢迎您。如果您想调试代码,不要依赖对象的 retainCount 属性。该指南的链接说得最多,这完全是关于何时发布:仅当您声称拥有实例的所有权时。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2010-11-16
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    相关资源
    最近更新 更多