手动将nil设置为swift对象以避免保留周期?

时间:2015-08-27 14:17:04

标签: ios swift automatic-ref-counting

我一直在分析其中一个最近用swift编写的应用程序,并且对ARC一般感到非常沮丧,来自于标记和扫描GC是常态的语言。

尤其是UIViewController 非常复杂且与其他class有很多依赖关系,我一直未能使ARC正常工作。但我知道只需将保留的对象设置为nil就可以在不涉及ARC的情况下解除分配。

UIViewController尤其如此,我可以nilviewDidDisappear设置为Strong Reference Cycle或类似的所有保留对象。

这种做法是否被视为有害/有害?我应该更加努力让ARC工作吗?

编辑:通过不工作,我主要是打破weak,当存在多个依赖关系层次时,这变得非常笨重。

编辑:仅供参考,我知道在声明/捕获列表中使用unowned / <?php $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$dataProvider, 'id' => 'user-grid', 'columns'=>array( array( 'class' => 'CButtonColumn', 'name', 'email', array( 'name'=>'Office Managers', 'type'=>'raw', //for allowing raw html 'value'=>'customFunctions::getManagerListFromOfficeBranch($data->officeid)' //here I have created custom function that will get managers of office branch from office table ($data is used to get any value from current row of branch{you can send your feedback id here if you want any info from feedback toggle}only use if you want to ) ), ), ), )); ?> 会破坏保留周期。我问的是,由于对象的复杂性,或者对象的保留周期,使用这些规范变得难以处理。

2 个答案:

答案 0 :(得分:4)

我认为你应该看看你的班级结构 - 基本上找出哪些班级应该&#34;拥有&#34;某些属性(即强引用)以及只有在可用时才需要引用它们(即弱引用)。

我认为值得考虑这一点,因为它可能会简化您的代码。它还将为您提供真正考虑权限的机会 - 所有这些其他类确实需要访问这些对象等。

将事情设置为零的真正问题在于,您必须确保您正在捕捉所有强大的参考周期,并且最终,您不会从ARC中受益,从而使您的生活更轻松。

答案 1 :(得分:0)

  

尝试使用deinit方法,我猜错了

 deinit{
    person = nil
}