【问题标题】:When and why to release an object何时以及为何释放对象
【发布时间】:2009-07-31 09:23:08
【问题描述】:

我在我的代码中使用这些行

NSMutableArray * NewsFeedArray;
NewsFeedArray = [[[NSMutableArray alloc]init]retain];

我应该在哪里释放这个NSMutableArray,我为什么要释放那个对象?在我的项目中,我在 dealloc 方法中释放对象,但这样做需要更多时间。

谁能解释一下?

【问题讨论】:

    标签: objective-c cocoa memory-management retain


    【解决方案1】:
    NewsFeedArray =[[[NSMutableArray alloc] init] retain];
    

    这行代码实际上将您的对象的保留计数增加到 2。这可能就是您遇到对象未完全释放的原因。

    【讨论】:

      【解决方案2】:

      在添加对象后立即释放添加到 NewsFeedArray 的对象。将它们添加到数组中的事实使它们的保留计数增加了 1。数组“拥有”它们,当您释放数组时,其中的所有对象的保留计数都会减一(通常也会释放它们)。

      【讨论】:

        【解决方案3】:

        当你开始时你需要这样的东西(可能在你的init方法中):

        NSMutableArray* news = [[NSMutableArray alloc] initWithCapacity:10];
        

        请注意,您不需要保留它。

        添加东西:

        RandomObject* obj = [[RandomObject alloc] init];
        // set properties
        [news addObject:obj];
        [obj release];
        

        您可以释放新对象,因为将其添加到数组会增加其引用计数。

        最后,您将以下内容放入您的 dealloc 方法中:

        [news release];
        

        释放数组将自动释放它持有的每个对象。

        【讨论】:

          猜你喜欢
          • 2011-09-06
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-19
          • 2011-11-18
          相关资源
          最近更新 更多