编辑:有人建议我实施策略模式(http://en.wikipedia.org/wiki/Strategy_pattern),我认为我会做几个在Objective-C中实现委托协议的对象。这样就完成了我想要的封装,同时仍允许我在内存中拥有一个通用的视图控制器。
我有一个名为DetailViewController的类,它显示有关各种类型数据的信息 - 航点,路径,地图,照片。
现在,这个类长1400行,它有一些凌乱的switch语句。例如:
- (void) changeMiniView:(id)sender {
if (self.track) {
[self changeTrackMiniView:[sender selectedSegmentIndex]];
} else if (self.waypoint) {
[self changeWaypointMiniView:[sender selectedSegmentIndex]];
} else if (self.photo) {
[self changePhotoMiniView:[sender selectedSegmentIndex]];
} else if (self.map) {
[self changeMapMiniView:[sender selectedSegmentIndex]];
}
}
如果我创建了DetailViewController的子类,这将更加整洁,但我的难题是我想将viewController保留在内存中并且只是更改某些元素,所以我可以有清晰的过渡,特别是在3G手机上。
我觉得如果我希望我的代码整洁,我必须受到性能影响。
答案 0 :(得分:4)
在对象的字段中显示当前视图(而不是每种类型的miniview都有一个字段),并为每个视图实现changeMiniView。
然后你的方法看起来像:
- (void) changeMiniView: (id)sender {
[self.currentMiniView changeMiniView: [sender selectedSegmentIndex]];
}
答案 1 :(得分:1)
如何使用选择器?
- (void)viewDidLoad {
if (self.track) {
sel = @selector(changeTrackMiniView:);
} else if (self.waypoint) {
sel = @selector(changeWaypointMiniView:);
} else if (self.photo) {
sel = @selector(changePhotoMiniView:);
} else if (self.map) {
sel = @selector(changeMapMiniView:);
}
}
- (void)changeTrackMiniView:(id)sender {
....
}
- (void)changeMiniView:(id)sender {
[self performSelector:sel withObject:sender];
}