mySubview - это свойство, которое является ссылкой на объект UIView. Поэтому, когда вы присваиваете ему UIView объект, вы просто изменяете то, на что ссылается mySubview , и не более, чем в этом случае,
self.mySubview = anotherView;
Исходный объект UIView, на который ссылался mySubview , все еще упоминается в свойстве view *1013* s subviews . Ничего не меняется.
Но когда вы добавляете anotherView в качестве подпредставления mySubview , anotherView относится к иерархии представлений и отображается на экране. Так что это работает.
view (parent of) mySubview (parent of) anotherView
Однако, когда вы присваиваете anotherView непосредственно представлению , вы не только изменяете объект UIView, на который ссылался view , но и добавляете себя в parentView. , Это обрабатывается UIViewController .
self.view = anotherView;
Ваш setCurrentView должен быть примерно таким,
- (void) replaceSubview:(UIView *)newView {
CGRect frame = mySubview.frame;
[mySubview removeFromSuperview];
self.mySubview = newView;
[self.view addSubview:newView];
newView.frame = frame;
}