【问题标题】:Will the retain count increase when added to an array?添加到数组时保留计数会增加吗?
【发布时间】:2011-04-14 10:49:02
【问题描述】:

我只是想知道:如果将对象添加到 Objective-C 中的数组或字典中,它的保留计数会增加吗?我可以在将特定对象添加到数组或字典后立即释放它吗?

【问题讨论】:

  • 如果您真的费心阅读文档,您可以自己轻松回答(而且可能更快)!
  • @Sven:我阅读了文档,但由于我是这个平台的新手,我想非常清楚地了解它,我之前有一些疑问,现在很清楚了。
  • @joe Blow:在这方面我完全支持你,joe...这种行为会阻碍新用户进入 stackoverflow....

标签: objective-c ios nsarray nsdictionary retaincount


【解决方案1】:

是的,它会增加您添加的对象的保留计数,这就是为什么您可以在将对象添加到数组后立即释放它。

NSObject obj1;
obj1=[[NSObject alloc] init];
//obj1's retain count is 1 here.

[array1 addobject:obj1];
//obj1's retain count incremented by 1, so the total retain count is 2.

[obj1 release];
//obj1's retain count decremented by 1, so the total retain count is 1.

array1 将保留该对象,直到 array1 本身未被释放。

【讨论】:

    【解决方案2】:

    哈里帕萨德,

    NS[此处的集合名称] 保留添加到其中的对象,如 NSResponder 所述。其他一些事实:

    1. 对于您的评论“我可以发布它吗? 添加后”,简短的回答是 是的。很多时候我做一个 autorelease 对象是 将被收容在一个 集合,并且在集合之外不需要。
    2. 当您删除一个 集合中的对象, 引用计数递减。如果 你想确保它不会 从内存中删除(下一个池 扫)你需要保留 对象。

    【讨论】:

    • 对于您的第 2 点,在从集合中添加和删除时不涉及自动释放池。对象会立即被保留和释放,如果在从集合中删除对象时没有其他对象保留,则将在该时刻释放,而不是稍后释放。
    • @Brad... 对于第 2 点,我没有提及自动释放池。您的其余评论是在重申我当时所说的。
    【解决方案3】:

    NSArrays 保留添加到其中的任何对象。

    【讨论】:

    • 添加后可以释放吗
    • 所有标准的 Cocoa 容器都会保留添加到其中的对象。这意味着如果您不打算保留对它们的另一个引用,您可以立即释放它们。你真的应该阅读 Apple 的内存管理指南。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多