【问题标题】:Big problem with memory between methods方法之间的内存大问题
【发布时间】:2011-04-28 18:57:30
【问题描述】:

我不明白这个问题:

我有 2 个 A 类和 B 类,在 A 视图中我有两个 Button,ButtonCreate 和 ButtonAccess。

在B中有这个方法:

-(NSDictionary *) returnData
{
   NSDIctionary *data= [NSDictionary withObjectsAndKeys.....];
   return data;
}

在 A 中,我还有一个属性 @property(nonatomic, retain) NSDictionary *dictio,在 .m 文件中 @synthesize dictio = _dictio

ButtonCreate IBAction -->

B *secondaryClass = [[B alloc] init];
_dictio = [[secondaryClass returnData] retain];
[B release];

ButtonAccess IBAction -->

NSString *value = [_dati ObjectForKey... ];

问题:如果我多次按下 ButtonCreate,在 Instruments 中我会看到内存泄漏,但如果我切断 ButtonCreate 方法中的“保留”,当我从 ButtonAccess 访问数据时会崩溃。

我真的不明白我该怎么办...你能帮帮我吗?

非常感谢。

【问题讨论】:

    标签: objective-c memory


    【解决方案1】:

    在A中试试这个,我想它可以解决你的问题:

    ButtonCreate IBAction --> B *secondaryClass = [[B alloc] init];
    self.dictio = [secondaryClass returnData];
    [B release];
    

    【讨论】:

    • 谢谢,通过这种方式听起来不错并且有效,也感谢其他回答的人
    【解决方案2】:

    看来您正在尝试释放 B,而不是您命名为 secondaryClass 的 B 实例。

    B *secondaryClass = [[B alloc] init];
    _dictio = [[secondaryClass returnData] retain];
    [B release];
    

    不应该是:

    ...
    [secondaryClass release];
    

    【讨论】:

      【解决方案3】:

      你没有释放_dictio的旧值,你也没有释放secondaryClass

      B *secondaryClass = [[B alloc] init];
      
      if (_dictio != nil) 
           [_dictio release];
      
      _dictio = [[secondaryClass returnData] retain];
      [secondaryClass release];
      

      但是,由于您将属性声明为保留,您可以利用该属性为您执行此操作。

      B *secondaryClass = [[B alloc] init];
      self.dictio = [secondaryClass returnData]; // sends retain to new, release to old
      [secondaryClass release];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-27
        • 2013-10-11
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        相关资源
        最近更新 更多