释放UIAlertView时出现奇怪的编码模式

Fra*_*ank 3 cocoa-touch objective-c ios

在许多代码示例中,也在Apple文档网站上,您将看到这种模式.UIAlertView按顺序调用"show"和"release".

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!");
Run Code Online (Sandbox Code Playgroud)

当您运行此代码时,"已发布!" 当UIAlertView框仍在屏幕上时,将显示日志行.当它仍然在屏幕上看到时,释放这个对象似乎是一种奇怪的模式.这背后的想法是什么,这不是针对内存管理的常见问题吗?如果这个"show"调用会阻塞,我可以看到这个模式如何安全地释放内存.但是,由于执行了NSLog方法,它会继续执行您的代码.

Sve*_*ven 5

release并不意味着物体将立即被处理掉.它只是意味着您的代码在此之后不再需要访问它.其他代码(如系统框架)可能会保留它.