删除视图、ARC、与 Objective C 和 Swift 的差异

Removing views, ARC, differences from Objective C and Swift

在Objective C中,如果一个ViewController有一个UIKit对象属性,就说一个视图,在viewDidLoad中实例化,然后添加到子视图中,在为了将它从内存中删除,必须完成 removeFromSuperview() 和将对象设置为 nil(如果我没记错的话,但我可能...)

然而,在Swift中,只有可选类型的东西才能持有零值。

我的问题是,如果我想在我的应用程序中为 UILabels 或 UIViews 之类的东西设置动画,然后让它们消失(对用户而言并从内存中删除),将 UIKit 对象设置为 removeFromSuperView() 是足够?或者我是否必须让所有我试图制作动画的对象成为可选的,removeFromSuperView() 然后将它们设置为 nil?

我为我的口齿不清道歉。如果需要进一步说明,请告诉我。非常感谢您的意见。

如果您希望 weak 属性 对象解除分配,那么是的,您必须将它们设置为 nil 或等待拥有对象解除分配。

weak 属性中的对象将在释放父对象时获得 release 调用。这意味着如果没有其他对象保留对它们的引用,这些对象也将被释放。

如果您创建一个临时的 UILabel 不是视图控制器的 属性 并为其设置动画然后 removeFromSuperview() 它,那么它也应该从内存中消失。

因为它在创建动画的函数 运行 时被保留 (refcount: 1),后来由视图层次结构 (refcount: 2),函数结束 (refcount: 1),所以只有视图层次结构保留了它。如果你在动画结束时移除它 (refcount: 0) 它被释放。