我是一个新的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()
之后直接销毁,因为它是一个局部变量。
但我仍然可以在屏幕上看到这个让我非常困惑的观点。谁能帮我?非常感谢你!
答案 0 :(得分:3)
当您将视图添加到主视图时,幕后发生的事情是主视图采用了所有权'你的观点给你一个强烈的参考。这就是为什么它仍然显示在屏幕上,并没有被解除分配。
查看Swift文档中的本指南,了解有关ARC的更多信息。
答案 1 :(得分:1)
使用引用控制对象生存期。如果将视图添加到另一个视图,它仍然被该视图引用,作为子视图。
从视图中删除该子视图,例如someView.removeFromSuperView()将删除该引用,尽管您需要原始引用来执行此操作:/
为什么要将视图销毁,但仍然可见?
答案 2 :(得分:1)
您已将视图添加到视图控制器的视图中,因此保留计数为1(大于0,因此该对象无法取消分配)。如果您未手动从superview中删除视图,则会在超级视图释放期间取消分配。