Rya*_*yan 0 memory-management ios
我刚刚开始学习在iOS中正确释放用于内存管理的对象.我最大的问题是基于以下代码.
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"My View Controller";
UIBarButtonItem *item = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(doSomething)];
self.navigationItem.rightBarButtonItem = item;
[item release];
}
Run Code Online (Sandbox Code Playgroud)
好的,我看到UIBarButtonItem已经创建(alloc).现在,它被设置为rightBarButtonItem以下行中的属性:
self.navigationItem.rightBarButtonItem = item;
Run Code Online (Sandbox Code Playgroud)
在此行之后,该项目将被释放.
[item release];
Run Code Online (Sandbox Code Playgroud)
我假设该项目被复制到rightBarButtonItem但我怎么知道这发生了.如果它通过引用传递,我会有一个问题,不是吗?有人可以澄清这里发生了什么以及为什么发布该对象是合法的?非常感谢.
这是因为rightBarButtonItem宣布了retained.(参见UINavigationItem文档)
将属性声明为保留时:
@property(nonatomic, retain) UIBarButtonItem *rightBarButtonItem
Run Code Online (Sandbox Code Playgroud)
您说当您更改其值时,aNavItem.rightBarButtonItem = aNewItem您将发送一条[aNewItem retain]消息.
因此,您可以安全地释放它(因为它被保留rightBarButtonItem)
有关详细信息,我强烈建议您在Apple内存管理文档中查看(每月只是习惯它,直到它成为第二天性)