Because objects are reference types, not value types, if you set a UIView
equal to another UIView
, the views are the same object. If you modify one you'll modifying the other as well.
I have an interesting situation where I would like to add a UIView
as a subview in another view, then I make some modifications, and those modifications should not affect the original UIView
. How can I make a copy of the UIView
so I can ensure I add that copy as a subview instead of a reference to the original UIView
?
Note that I can't recreate the view in the same way the original was created, I need some way to create a copy given any UIView
object.
You can't arbitrarily copy an object. Only objects that implement the
NSCopying
protocol can be copied.However, there is a workaround: Since
UIView
s can be serialized to disk (e.g. to load from a XIB), you could useNSKeyedArchiver
andNSKeyedUnarchiver
to create a serializedNSData
describing your view, then de-serialize that again to get an independent but identical object.You must use pattern Prototype
Example of the prototype:
An example of using prototype: