iOS-引用UIViewController对象的自定义类

iOS-引用UIViewController对象的自定义类,ios,memory-management,retain,automatic-ref-counting,Ios,Memory Management,Retain,Automatic Ref Counting,首先,我使用ARC和iOS4+ 我有一个需要引用自定义UIViewController的自定义类。 除非我理解错误,否则在该引用上使用属性retain意味着每当我的类销毁时,UIViewController也会销毁? 或者这是否意味着需要释放appdelegate(创建UIViewController的appdelegate)和我的自定义类才能释放UIViewController 因此,我还阅读了有关\uuuuuuunsaretained属性的内容。我的自定义类可以简单地使用它而不复杂地引用UI

首先,我使用ARC和iOS4+

我有一个需要引用自定义UIViewController的自定义类。 除非我理解错误,否则在该引用上使用属性
retain
意味着每当我的类销毁时,UIViewController也会销毁? 或者这是否意味着需要释放appdelegate(创建UIViewController的appdelegate)和我的自定义类才能释放UIViewController

因此,我还阅读了有关
\uuuuuuunsaretained
属性的内容。我的自定义类可以简单地使用它而不复杂地引用UIViewController吗?由于appdelegate最终会释放UIViewController,因此不存在指针悬空的风险

谢谢


编辑:自定义类是一个单例对象,如果它很重要,它将贯穿整个过程

每个对象都有一个保留计数,从本质上决定它是否需要保留。在这种情况下,AppDelegate已经保留了UIViewController(保留计数为1),但这并不意味着自定义类也不能保留UIViewController(保留计数为2)。因此,您的第二个场景更接近事实:当您的自定义类销毁并释放UIViewController时,保留计数将降回1。然后,当AppDelegate销毁并释放它时,计数将降至0,对象将被销毁


更进一步说,如果在自定义类中,您将UIViewController分配给另一个bult-in或自定义类(该类也保留了UIViewController),则计数将继续增加,然后随着每个对象依次释放其兴趣,计数将下降。

我明白了。那么在我的自定义类中使用retain有什么缺点吗?还是我应该继续使用不安全的?我基本上是使用您应该使用的自定义类从UIViewController访问方法/变量。即使您的UIViewController在自定义类的生命周期中不太可能被破坏,它也不会伤害任何东西,是一种良好的做法。一般来说,只要保留和释放计数匹配(并且不创建循环保留循环),就可以了。当我使用自定义类访问UIViewController的方法和变量时,是否也必须将它们用@synchronize括起来?是否使用@synchronize实际上是一个单独的问题。你可能想好好读一读。由于您的类是单线程,如果您使用多个线程,您可能需要考虑锁定/@synchronize,但这实际上取决于您的具体场景。