UII need copy, self controller or self.view, i have tried:
UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];
UIView* viewOfS
Unfortunately I am not yet allowed to comment, but rishi's solution has one problem: it does not copy NSLayoutConstraints. So if any of your views are using autolayout, those are not going to get copied. I am writing a mini-lib to solve that and will post it to github when done. Unfortunately, I haven't found a ready-to-use solution anywhere.
//Edit
Sorry, what I wrote previously was not completely correct. I did some more research and it turns out that on default, the NSLayoutConstraints in the archived view are NOT saved. But, you can actually specify if you want to archive a constraint by setting its shouldBeArchived property to YES. Then, even after this fake copy, you retain the right constraints in the copied view.
For an object to be copyable it must implement NSCopying protocol which UIView class nor UIViewController class do not.
If you want to copy a view, I'm pretty sure you're doing something wrong. The copying should be replaced by reusable UIView just like in UITableView using dequeueReusableCellWithIdentifier: method.
Copying view controller is definitely an anti-pattern. If you want exact copy of the view controller that you already have - create a new instance of it with same parameters that current one is.
Use -
NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
Similarly -
NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];