一尘不染

在Swift中创建UIView的副本

swift

因为对象是引用类型,而不是值类型,所以如果将equals设置UIView为another
UIView,则视图是同一对象。如果您修改了一个,那么您也将修改另一个。

我有一个有趣的情况,我想UIView在另一个视图中添加一个作为子视图,然后进行一些修改,这些修改不应影响原始视图UIView。如何制作的副本,以UIView确保可以将其添加为子视图而不是对原始视图的引用UIView

请注意,我无法以与原始视图相同的方式来重新创建视图,我需要某种方法来创建给定任何UIView对象的副本。


阅读 296

收藏
2020-07-07

共1个答案

一尘不染

您不能随意复制对象。只能NSCopying复制实现该协议的对象。

但是,有一种解决方法:由于UIViews可以序列化到磁盘(例如,从XIB加载),因此您可以使用NSKeyedArchiverNSKeyedUnarchiver创建一个序列化的NSData描述视图,然后再次对其进行反序列化以获得一个独立但相同的对象。

2020-07-07