【问题标题】:NsMutable array retain countNsMutablearray 保留计数
【发布时间】:2010-08-23 13:23:41
【问题描述】:

我使用这些工具在我的 iphone 应用程序中查找泄漏,我发现我的代码中的这一行有泄漏

tableViewController.dataSource = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];

定义为retain的属性dataSource。 这是一个错误吗?!

【问题讨论】:

    标签: iphone nsmutablearray


    【解决方案1】:

    分手:

    NSMutableArray *mutArray = [[NSMutableArray alloc] initWithArray:[subjects_dic allKeys]];
    [tableViewController setDataSource:mutArray];
    [mutArray release];
    

    这与您用于从导航控制器创建、推送和释放视图的模式相同。

    【讨论】:

      【解决方案2】:

      如果您在属性声明中指定了保留,那么您分配给该属性的任何内容都将被保留。

      所以在你的例子中,你有两个选择:

      1. 您可以简单地使用[NSMutableArray arrayWithArray:[subjects_dic allKeys]];

      2. ,而不是使用 alloc/init 方法创建新数组
      3. 设置后释放一次属性。此选项不是一个好主意,因为如果将来更改属性的内存管理并且忘记此版本,它可能会导致崩溃。

      我推荐选项 1。

      【讨论】:

        【解决方案3】:

        另一种选择:

        // mutableCopy implicitly retains the array returned by allKeys
        NSMutableArray *mutArray = [[subjects_dic allKeys] mutableCopy];
        [tableViewController setDataSource:mutArray]; // @property dataSource retains mutArray
        [mutArray release];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-01
          • 2011-07-25
          • 1970-01-01
          • 2011-10-30
          • 1970-01-01
          • 2015-06-16
          相关资源
          最近更新 更多