我经常会混淆时使用的数据源模式,何时使用属性为对象提供配置信息。
我有两种方法可以做到这一点,
一般来说,我养了很多对象的类必须配置性能和重置对象,并使用新属性继续的方法。
而对于其配置的其他对象的对象,我一直在向名称configureXYZ的方法:WithValues:,其中重置属性和调用对象的方法重置要配置。
这个我已经看到了的MPMoviePlayerController,我们要设置属性。
而另一种方式是的tableView是如何工作的,所有的配置信息都来自数据源的方法。
任何人都可以扔在这是首选考虑脚本的方式更多的光。
因为它常常觉得倾向于使用设计模式,使代码看起来时尚,但我想知道我们什么时候真正需要这些。 我与委托模式绝对清晰,必须使用它定期。 数据源是一件事我从来没有明确。
当设计一个类的关键因素,你应该使用委托或性能之间作出决定时考虑的是如何把价值观经常改变。 性能效果最好,如果你将设置值一次,他们不应该再次发生变化。 代表(其数据源只是一个例子)工作最好的,如果该值可能会随时间变化或由于条件改变。
例如,在UITableView
,行数是高度动态的。 它可以为表视图的控制之外的原因是多方面的改变。 什么行,甚至表示是高度动态的。 他们可能是数据; 他们可能是菜单选项; 他们可能是在游戏作品。 UITableView
不会尝试去猜测或控制任何。 它移动到哪里可能非常复杂的决策可以由一个委托(数据源)。
MPMoviePlayerController
有意思很具体的事情,应该几乎从未改变(特别是一旦电影开始播放)几个控件。 基本上你设定的事情了,打play
,然后走开。 在这种情况下,委托将可能是矫枉过正。
有很多情况下是在中间,并且无论哪种方式,可能是确定。 我会鼓励开发商首先考虑的代表团,然后如果它没有任何意义与性能去。 这并不是因为代表团是永远正确的答案,但更多的是因为大多数C ++ - 或Java教育的开发商并不认为在授权方面,所以应该有意识地努力这样做。
沿着这些线路一些其他的想法:
当使用性能,这是理想的,如果它们在初始化时被配置,并且此后不可改变的。 这解决了问题,大量。
如果你发现自己需要很多的属性,代表团可能是更好的,往往简单。
委托通知方法( somethingDidHappen:
通常更好,因为模块来实现。 (块是相对较新的ObjC,许多基于委托的苹果接口移动到块,但你会看到一个真正的混合那里的历史原因。)
“委托”和“数据源”之间的区别在于,一个委托管理行为,而数据源提供的数据。 它们通常是相同的实施。
这主要取决于类的动态。 UITableView的是一个非常动态的界面元素。 它的数据来得快,去得也快。 您可以添加/删除/编辑/排序。 你可以与它进行交互。 如果您分配的属性到的tableView,它失去了一些,使得它作为强大的,因为它是性能。 的MPMoviePlayerController,而另一方面,有着不同的目的。 我从来没有使用这个类,而是由它的外观,它读取一个视频文件,并提供播放。 还有就是不要它了很多变化,所以性能使得有很大的意义。
如果你正在写一个类,你需要该类尽可能(UIPickerView,UITableView的)那样灵活,有代表允许你这样做。 如果你的类只初始化后有限的配置工作,你可以通过采取财产的做法更好。