什么时候删除swift中的对象?

时间:2015-09-02 16:08:26

标签: ios swift object

我是一个新的Swift学习者。现在我对Swift对象的重新分配感到困惑。例如,我在select data_result.* from data as data_groups join (select person_id from data where is_primary group by person_id order by random() limit 1) as selected_primary ON (data_groups.person_id = selected_primary.person_id) JOIN data AS data_result ON (data_groups.group_id = data_result.group_id AND data_groups.year = data_result.year) 方法中创建了一个UIView对象,并将其添加到主视图中。我认为我创建的视图应该在调用方法viewDidload()之后直接销毁,因为它是一个局部变量。

但我仍然可以在屏幕上看到这个让我非常困惑的观点。谁能帮我?非常感谢你!

3 个答案:

答案 0 :(得分:3)

当您将视图添加到主视图时,幕后发生的事情是主视图采用了所有权'你的观点给你一个强烈的参考。这就是为什么它仍然显示在屏幕上,并没有被解除分配。

查看Swift文档中的本指南,了解有关ARC的更多信息。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID49

答案 1 :(得分:1)

使用引用控制对象生存期。如果将视图添加到另一个视图,它仍然被该视图引用,作为子视图。

从视图中删除该子视图,例如someView.removeFromSuperView()将删除该引用,尽管您需要原始引用来执行此操作:/

为什么要将视图销毁,但仍然可见?

答案 2 :(得分:1)

您已将视图添加到视图控制器的视图中,因此保留计数为1(大于0,因此该对象无法取消分配)。如果您未手动从superview中删除视图,则会在超级视图释放期间取消分配。