如何释放已分配的栏按钮项

时间:2012-10-18 14:40:11

标签: objective-c ios uibarbuttonitem

我可以自动退款吗?

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];

它可以工作并删除我收到的分析器警告。如果没有,我将如何正确地发布它。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

这是正确的方法(虽然现在正确的方法是使用ARC)。

可接受的替代方案(在非ARC环境中)是:

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = barButton;
[barButton release];

navigationItem的setter保留按钮本身,因此必须释放alloc / init返回的对象,以便平衡其中一个的保留计数。 描述的方式(alloc / init返回具有retaincount 1的对象,setter将+1添加到该对象)。

这绝对是 NOT 推荐:

[self.navigationItem.leftBarButtonItem release];

答案 1 :(得分:1)

这是正确的。

leftBarButtonItem是一个保留UIBarButtonItem的属性,所以是的,这是一个很好的方法。

如果没有自动释放消息,则会导致内存泄漏。

答案 2 :(得分:1)

这是正确的,你也可以这样做

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = item;
[item release];