Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
对于iOS版的Swift,我们应该做多少清理工作?_Ios_Swift - Fatal编程技术网

对于iOS版的Swift,我们应该做多少清理工作?

对于iOS版的Swift,我们应该做多少清理工作?,ios,swift,Ios,Swift,作为一名新开发人员,我有点不确定在iOS上使用Swift后我们应该清理多少。有很多不同的信息,因为自iOS开始以来,这也发生了很大的变化 因此,当我们有静态视图和使用故事板时,我的想法是,一切都为我们清理干净了,我们不必(几乎)做任何事情 但是当我基于用户点击动态创建视图时会怎么样呢?如果有必要,最好的方法是什么 现在我做的就像我在Android中做的一样,只是在我创建一个新的视图实例之前,将我的全局引用设置为nil。我已经读过这篇文章,应该这样做: myView?.removeFromSupe

作为一名新开发人员,我有点不确定在iOS上使用Swift后我们应该清理多少。有很多不同的信息,因为自iOS开始以来,这也发生了很大的变化

因此,当我们有静态视图和使用故事板时,我的想法是,一切都为我们清理干净了,我们不必(几乎)做任何事情

但是当我基于用户点击动态创建视图时会怎么样呢?如果有必要,最好的方法是什么

现在我做的就像我在Android中做的一样,只是在我创建一个新的视图实例之前,将我的全局引用设置为nil。我已经读过这篇文章,应该这样做:

myView?.removeFromSuperview()

即使动态创建视图,也不必调用
removeFromSuperview
,因为视图对其超级视图的引用很弱


有关更多信息,请参阅。

尽管Swift使用的自动引用计数方法与Java的垃圾收集方法非常不同,但程序员的感觉却惊人地相似。一方面,您必须意识到在Swift中创建循环引用的可能性,并插入弱引用以避免循环。另一方面,您可以依靠在发布最后一个引用后立即发布资源,并使用
deinit
方法来处理清理

但是当我动态地创建视图时呢

动态创建视图并将它们添加到Cocoa的视图层次结构中,可以确保在视图层次结构决定不再需要它们时,您的视图将被释放

在Cocoa循环使用视图的情况下,例如向表视图单元格或集合视图单元格添加视图时,必须小心。由于单元是循环使用的,因此您需要(1)删除添加的视图以避免再次添加它们,或者(2)检查视图是否已添加,并重用已有的视图


回收单元格时删除添加视图的一种方法是实现
prepareforeuse
方法,并删除添加的视图。

如果您的目标是清理,则不需要调用
removeFromSuperview
。如果您的目标是更改UI,请在适当的地方调用
removeFromSuperview
。如果您正确地使用了引用&弱引用(苹果在这方面做得相当好),那么几乎没有需要用Swift编写的“清理”代码。