【问题标题】:memory leak in simulator模拟器内存​​泄漏
【发布时间】:2011-05-13 20:09:12
【问题描述】:

仪器在以下代码中向我显示了模拟器中的泄漏,

UIBarButtonItem *connectButton = [[UIBarButtonItem alloc] initWithTitle:@"Connexion" style:UIBarButtonItemStyleBordered target:self action:@selector(pushViewController)];

    [self.navigationItem setLeftBarButtonItem:connectButton animated:animated];
    [connectButton release];

你看到任何泄漏吗?谢谢

【问题讨论】:

  • 报告什么样的泄漏?
  • 这段代码看起来没问题——你确定这是报告内存泄漏的地方吗?
  • 泄露对象:_NSCFType。负责图书馆:CoreGraphics。负责框架:CGTypeCreateInstanceWithAllocator
  • Leaks 向您展示了对象被分配的位置,不是它被泄露的位置。

标签: iphone objective-c ios memory-leaks ios-simulator


【解决方案1】:

Leaks 显示的是对象的分配位置,而不是对象的泄漏位置

虽然两者可能相同,但对象的泄漏通常更可能是由其他地方的额外保留或丢失释放引起的。

【讨论】:

  • 你知道为什么这里有泄漏吗:self.navigationController.navigationBar.tintColor = [UIColor clearColor]; ?我已经在设备中测试过这个
  • 对不起;我没听懂你的回答
  • 那行代码不可能泄露; clearColor 将返回一个单例或自动释放的对象。您立即将控制权交给了导航栏。除非您创建了自己的导航栏类并且对 tintColo 管理不善,否则该代码行不能成为泄漏分配的来源。
【解决方案2】:

我在您发布的代码中没有发现任何漏洞。也就是说,有几个问题:

  1. 您怎么知道泄漏的位置?
  2. navigationItem 的 getter 是否有可能使用 copy?如果是这样,那里可能有泄漏。

【讨论】:

  • 在仪器的堆栈跟踪中。我还没有使用副本声明 navigationItem,我刚刚在我的控制器中完成了 self.navigationItem
  • 当我这样做时我有很多泄漏:self.navigationController.navigationBar.tintColor = [UIColor clearColor];
【解决方案3】:

...在设备上?你应该在设备上检查这个。在极少数情况下,您希望使用模拟器进行此类测试。它不代表设备本身的行为方式。我建议您在设备上进行测试,然后如果您仍然看到它回来这里。

【讨论】:

  • 你知道为什么这里有泄漏吗:self.navigationController.navigationBar.tintColor = [UIColor clearColor]; ?我已经在设备中测试过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多