我一直在分析其中一个最近用swift编写的应用程序,并且对ARC一般感到非常沮丧,来自于标记和扫描GC是常态的语言。
尤其是UIViewController
非常复杂且与其他class
有很多依赖关系,我一直未能使ARC正常工作。但我知道只需将保留的对象设置为nil
就可以在不涉及ARC的情况下解除分配。
对UIViewController
尤其如此,我可以nil
将viewDidDisappear
设置为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 )
),
),
),
)); ?>
会破坏保留周期。我问的是,由于对象的复杂性,或者对象的保留周期,使用这些规范变得难以处理。
答案 0 :(得分:4)
我认为你应该看看你的班级结构 - 基本上找出哪些班级应该&#34;拥有&#34;某些属性(即强引用)以及只有在可用时才需要引用它们(即弱引用)。
我认为值得考虑这一点,因为它可能会简化您的代码。它还将为您提供真正考虑权限的机会 - 所有这些其他类确实需要访问这些对象等。
将事情设置为零的真正问题在于,您必须确保您正在捕捉所有强大的参考周期,并且最终,您不会从ARC中受益,从而使您的生活更轻松。
答案 1 :(得分:0)
尝试使用deinit方法,我猜错了
deinit{
person = nil
}