在下面的代码中,alert
被分配、初始化、显示,然后释放。发布前后,alert
仍然指向同一个地址。为什么release
后系统没有将alert
指针设置为nil
?:
-(void) viewDidLoad {
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @”Hello”
message: @”This is an alert view”
delegate: self
cancelButtonTitle: @”OK”
otherButtonTitles: @”Option 1”, @”Option 2”, nil];
[alert show];
[alert release];
[super viewDidLoad];
}
最佳答案
我。因为即使它是合适的,release
也不能(也不会)对其调用的对象指针执行任何操作,因为与 C 中的任何内容一样,它是按值传递的。此外,在手动引用计数下,指针永远不会隐式设置为 nil
,这是 ARC 下弱
指针的一个功能。
二.无论如何,这都是错误的。 UIAlertView 类在显示时将其自身作为 subview 添加到某个 View 中,因此它会被保留。因此,当您期望它被释放时,它的引用计数不为零。
关于objective-c - 为什么release不将指针设置为nil而是让它指向已释放的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917219/