objective-c - 删除 View 、ARC、与 Objective C 和 Swift 的差异

标签 objective-c swift automatic-ref-counting

在 Objective C 中,如果一个 ViewController 有一个 UIKit 对象属性,我们就说一个 View ,并在 viewDidLoad 中实例化,然后将其添加到 subview 中,以便将其从内存中删除,removeFromSuperview() 和必须将对象设置为 nil (如果我没有记错的话,但我可能是......)

但是,在 Swift 中,只有具有可选类型的事物才能保留 nil 值。

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

我为我的表达能力不佳表示歉意。如果需要进一步说明,请告诉我。非常感谢您的投入。

最佳答案

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

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

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

由于创建动画的函数运行时它被保留了(refcount: 1),后来被 View 层次结构(refcount: 2)保留,函数结束了(refcount: 1),因此只有 View 层次结构保留它。如果您在动画结束时将其删除(refcount:0),它将被释放。

关于objective-c - 删除 View 、ARC、与 Objective C 和 Swift 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002411/

相关文章:

objective-c - 如何更改 UITextView 中单词的颜色?

ios - UILabel 如何垂直居中其文本?

objective-c - NSFetchedResultsController - 严重的应用程序错误

IOS Swift fatal error : unexpectedly found nil while unwrapping an Optional value

objective-c - 我们如何实现selectionRectsForRange : from UITextInput Protocol?

iphone - 苹果新验证 Controller 的异步部分是必须的吗?

ios - 更改特定时间的颜色按钮,然后转到正常颜色 SWIFT

ios - 在 View Controller 中使用时不显示 Swift 自定义控件(附代码)

iphone - iOS ARC - 弱属性和强属性

cocoa - 使用 ARC 在 Xcode 4 (OSX 10.7.2) 中将 Cocoa 窗口显示为工作表