我可以自动退款吗?
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
它可以工作并删除我收到的分析器警告。如果没有,我将如何正确地发布它。
感谢您的帮助
答案 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];