简单地使用这种方式:
UIView* view2 = [view1 copy]; // view1 existed
这将导致模拟器无法启动此应用程序。
试着保留,
UIView* view2 = [view1 retain]; // view1 existed
// modify view2 frame etc
对view2
的任何修改都将适用于view1
,我理解view2
与view1
共享相同的内存。
为什么UIView
不能被复制?原因何在?
发布于 2011-01-15 21:54:19
你的应用程序可能会崩溃,如下所示:
[UIView copyWithZone:]: unrecognized selector sent to instance 0x1c6280
原因是UIView没有实现复制协议,因此在UIView中没有copyWithZone
选择器。
发布于 2012-12-07 10:33:29
这可能对你有用。存档视图,然后立即将其解压。这将为您提供视图的深层副本:
id copyOfView =
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
发布于 2017-03-20 15:11:57
对于swift3.0.1:
extension UIView{
func copyView() -> AnyObject{
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as AnyObject
}
}
https://stackoverflow.com/questions/4425939
复制相似问题