寻找合适的模式(iPhone / Objective C)

时间:2010-02-03 04:26:55

标签: iphone objective-c

编辑:有人建议我实施策略模式(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手机上。

我觉得如果我希望我的代码整洁,我必须受到性能影响。

2 个答案:

答案 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];
}
相关问题