Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从目标C和Swift中删除视图、圆弧和差异_Objective C_Swift_Automatic Ref Counting - Fatal编程技术网

Objective c 从目标C和Swift中删除视图、圆弧和差异

Objective c 从目标C和Swift中删除视图、圆弧和差异,objective-c,swift,automatic-ref-counting,Objective C,Swift,Automatic Ref Counting,在Objective C中,如果ViewController有一个UIKit对象属性,比如说一个视图,并在viewDidLoad中实例化,然后添加到子视图中,为了将其从内存中删除,则必须执行removeFromSuperview()和将对象设置为零(如果我没有弄错,但我可能是…) 然而,在Swift中,只有具有可选类型的对象才能保存值nil 我的问题是,如果我想在我的应用程序中设置UILabels或UIView之类的动画,然后让它们消失(对用户和从内存中删除),将UIKit对象从SuperVie

在Objective C中,如果ViewController有一个UIKit对象属性,比如说一个视图,并在viewDidLoad中实例化,然后添加到子视图中,为了将其从内存中删除,则必须执行removeFromSuperview()和将对象设置为零(如果我没有弄错,但我可能是…)

然而,在Swift中,只有具有可选类型的对象才能保存值nil

我的问题是,如果我想在我的应用程序中设置UILabels或UIView之类的动画,然后让它们消失(对用户和从内存中删除),将UIKit对象从SuperView()中删除就足够了吗?或者我必须使所有我尝试设置动画的对象都是可选的,从SuperView()移除,然后将它们设置为零


我为我拙劣的发音道歉。如果需要进一步澄清,请让我知道。非常感谢您的输入。

如果希望解除分配
弱属性对象,则必须将其设置为
nil
或等待所属对象解除分配

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

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


由于创建动画的函数在运行时被保留了
(refcount:1)
,随后被视图层次结构
(refcount:2)
,因此函数结束了
(refcount:1)
,因此只有视图层次结构保留了它。如果在动画结束时删除了它(refcount:0)
,它将被解除分配。

子视图在swift中通常是可选的,因为它们是在父对象之后初始化的(非可选属性需要在所属实例的初始化完成之前有一个值)。这就是为什么您会看到例如,
@IBOutlet弱var myLabel:UILabel总是(
也可以,但不太方便)@NicolasMiari是正确的。我想补充两点:1)几乎没有理由不将UIView类型属性作为可选属性。它简化了UIViewController的初始化,2)removeFromSuperView只调用UIView.removeSubview(:UIView);它不会将对象设置为nil。