【问题标题】:iPhone SDK UIBarButton Memory LeaksiPhone SDK UIBarButton 内存泄漏
【发布时间】:2011-05-14 00:28:36
【问题描述】:

我一直在编写一个运行良好的代码,但我正在使用 Instruments 测试它是否有泄漏,并且遇到了 UIBarButtonContent 的泄漏,这是有问题的行。

     UIButton *searchbutton =  [UIButton buttonWithType:UIButtonTypeCustom];
 [searchbutton setImage:[UIImage imageNamed:@"searchbutton.png"] forState:UIControlStateNormal];
 [searchbutton addTarget:self action:@selector(search) forControlEvents:UIControlEventTouchUpInside];
 [searchbutton setFrame:CGRectMake(0, 0, 29,29)];
 self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:searchbutton];

我应该在任何地方释放 searchButton 或 self.navigationItem.rightBarButtonItem。

一些帮助会很棒。

干杯

【问题讨论】:

    标签: iphone memory-leaks ios4


    【解决方案1】:

    你需要释放你的 UIBarButtonItem:

    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:searchbutton] autorelease];
    

    【讨论】:

    • @iamsmug -- 如果您查看 rightBarButtonItem 的文档,它会说:@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem 这意味着它将保留该项目。因为你分配了它,所以你还需要释放/自动释放它,否则保留计数将是 2,你将有内存泄漏。
    【解决方案2】:

    你需要释放 UIBarButtonItem 引用你在那里分配。

    【讨论】:

      【解决方案3】:

      无论何时分配,您都有责任释放。如果您在最后一行之后立即发布,不确定您的代码会发生什么,如果您发现问题,您可以尝试使用 autorelease。

      【讨论】:

      • 如果我释放 UIBarButtonItem 分析器说'释放'消息应该发送到类'UIBarButtonItem'而不是直接类的实例'
      • iamsung,你不能在 UIBarButtonItem 上调用 release,你需要在你创建的 UIBarButtonItem 实例上调用 release。您创建它的方式,您永远不会拥有指向您可以访问的实例的自己的指针。您可以使用 autorelease 来处理这个问题,如我的回答所示,或者您可以在单独的行中创建自己的实例,并将其分配给 rightBarButtonItem。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2010-12-18
      • 2010-11-23
      • 2011-12-10
      • 2011-05-24
      相关资源
      最近更新 更多