Sen*_*ful 1 objective-c automatic-ref-counting ios6
我想为UIAlertView创建一个类似的类,它不需要强大的ivar.
例如,使用UIAlertView,我可以在我的一个UIViewController方法中执行以下操作:
UIAlertView *alertView = [[UIActionSheet alloc] initWithTitle:nil
message:@"Foo"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alertView show];
Run Code Online (Sandbox Code Playgroud)
...并且在不再可见之前不会释放actionSheet.
如果我要尝试做同样的事情:
MYAlertView *myAlertView = [[MYAlertView alloc] initWithMessage:@"Foo"];
[myAlertView show];
Run Code Online (Sandbox Code Playgroud)
... myAlertView实例将在我当前的方法结束时自动解除分配(例如,[myAlertView show]在行之后).
什么是防止这种情况发生的正确方法,而无需strong在我的UIViewController 上将myView声明为属性?(即我希望myView是一个局部变量,而不是一个实例变量,我希望MYAlertView实例负责自己的生命周期,而不是我的UIViewController控制它的生命周期.)
更新:MYAlertView继承自NSObject,因此无法添加到Views层次结构中.
UIAlertView创造一个UIWindow它保留的.然后,警报视图将自身添加为窗口的子视图,因此窗口将保留警报视图.因此,它创建了一个保持周期,使其和窗口保持活动状态. UIActionSheet以同样的方式工作.
如果你需要你的物体留在身边,没有别的东西可以保留它,它就可以保留它自己.您需要确保有一种定义明确的方法,以便在不再需要时自行释放.例如,如果它正在管理一个窗口,那么它应该在窗口离开屏幕时自行释放.