ARC中的“火与忘记”课程

时间:2012-07-02 18:34:00

标签: objective-c ios automatic-ref-counting

我需要为自己的应用制作自定义UIAlertView,并且我遇到了this文章,介绍了如何进行此操作。我已经对它进行了一些更改,但更重要的事实仍然是这个类不像UIAlertView所做的那样起作用“消防而忘记”警报,因为ARC不允许人们调用{ {1}}。

基本上,我希望能够以与普通警报视图相同的方式使用我的自定义警报视图,因此我可以创建并显示如下:

retain

所以我的问题是,如果在ARC项目中工作时,如果它没有在调用类中创建CustomAlertView *alert = [[CustomAlertView alloc] init];//Init presumably does the view setup [alert show]; 对它的strong引用,那么如何使该对象不再解除分配?

修改

我想重要的是要提到,为了获得我想要的完全自由的视图可定制性,我必须使它成为一个新的ViewController类,它是 NOT 的一个子类{{ 1}}

编辑2

对不起,我没有太仔细地查看我的链接,我原来连接了错误的教程。 THIS是我基于

视图的正确教程

2 个答案:

答案 0 :(得分:1)

如果您想模仿UIAlertView的工作方式,则需要创建一个新的UIWindow对象,正确初始化并使用[window makeKeyAndVisible]显示它。请注意这会出现,但保留窗口。如果窗口的引用计数降至零,则窗口将从屏幕中删除。

您希望刻意创建一个保留周期,一旦您的警报视图被解除,您就会中断该保留周期。

即。您的customalertview类创建并保留UIWindowUIWindow保留其子视图:您的customalertview类。然后,通过释放UIWindow,窗口将释放您的customalertview。

答案 1 :(得分:0)

在需要时,您必须对子类实例进行强有力的引用。例如,您可以通过在视图控制器中显示对象(因为视图控制器层次结构得到强烈维护),或者通过对类的所有实例进行类级引用来实现此目的。