在许多代码示例中,也在Apple文档网站上,您将看到这种模式。使用" show"来调用UIAlertView。和"发布"按顺序。
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Panic!"
message:@"The world is gonna explode!"
delegate:nil cancelButtonTitle:@"Who cares?"
otherButtonTitles:@"Boom!", nil];
[alert show];
[alert release];
NSLog(@"released!");
当您运行此代码时,"已发布!"当UIAlertView框仍在屏幕上时,将显示日志行。当它仍然在屏幕上看到时,释放这个对象似乎是一种奇怪的模式。这背后的想法是什么,这不是针对内存管理的常见问题吗?如果这个"显示"呼叫会阻塞,我可以看到这种模式如何安全地释放内存。但是,由于执行了NSLog方法,它会继续执行您的代码。
答案 0 :(得分:5)
release
并不意味着物体会立即被处理掉。它只是意味着您的代码在此之后不再需要访问它。其他代码(如系统框架)可能会保留它。
答案 1 :(得分:4)
[alert show];
保留UIAlertView
答案 2 :(得分:0)
如果您检查代码,您会看到在创建UIAlertView时它也正在分配。因此,警报的保留计数为1。 如果您阅读Apple文档,您将看到[alert show]也会增加UIAlertView的保留计数。因此,在该行之后,保留计数将为2。 行[alert release]会再次将保留计数减少到1,因为对于此代码,保持对UIAlertView的引用并不重要。 因此,在此之后,保留计数为1,并显示UIAlertView。当用户按下按钮关闭警报时,关闭警报的方法会将保留计数减少到0并释放内存