iOS版 - 具有自定义类参考的UIViewController对象

问题描述:

首先,我使用ARC和定位的iOS4 +iOS版 - 具有自定义类参考的UIViewController对象

我有一个需要自定义的UIViewController引用自定义类。 除非我错过了某些东西,那么引用该属性retain意味着每当我的类破坏时,UIViewController都会破坏? 或者是否意味着appdelegate(它创建了UIViewController)和我的自定义类需要被释放,以便解除分配UIViewController?

所以我也读了关于__unsafe_unretained属性。我的自定义类是否可以简单地使用它来引用UIViewController?由于appdelegate最终会释放UIViewController,因此不存在悬挂指针的风险?

感谢

编辑:自定义类是单对象,将生活在整个过程中,如果它的事项

每个对象都有一个保留计数,基本上决定了它是否需要坚持。在这种情况下,您的AppDelegate已经保留了UIViewController(保留数为1),但这并不意味着您的自定义类不能保留UIViewController(保留数为2)。所以你的第二个场景更接近真相:当你的自定义类破坏并释放UIViewController时,保留计数将回落到1.然后,当AppDelegate破坏并释放它时,计数将降到0,并且对象将被销毁。

为了让这一步更进一步,如果您的自定义类的内部将UIViewController分配给另一个也保留它的bult-in或自定义类,则计数将继续增加,然后随着每个对象反过来释放它的兴趣。

+0

我明白了。那么在我的自定义类中使用retain还有什么缺点吗?或者我还应该使用__unsafe_unretain?我基本上使用自定义类访问UIViewController中的方法/变量 – KaiserJohaan

+0

您应该使用retain。它不会伤害任何东西,并且即使您的UIViewController在您的自定义类的生命周期中不太可能被破坏也是很好的做法。一般而言,只要您的保留和释放次数匹配(并且您不创建循环保留循环),您将会好起来。 –

+0

当我使用我的自定义类来访问UIViewController的方法和变量时,是否也必须将它们与@synchonrize放在一起? – KaiserJohaan