我应该将Cocoa绑定用于我的最新项目吗?

时间:2008-11-10 16:58:16

标签: cocoa cocoa-bindings

我正在启动一个我认为可以从绑定中受益的项目(我有一个源列表表,几个浏览器视图等),但我认为它也很可行,也许更容易理解,没有它们。根据我有限的经验,我发现绑定很难排除故障并且非常“神奇”(例如,很难在任何地方插入日志记录以确定哪些内容正在破坏,一切都有效或无效)。

这只是我缺乏经验的谈话(在这种情况下,我可以坐下来花一些时间来完成我对绑定的理解并期望事情变得更清晰/更容易)或者我会更好地编写所有胶水代码我确信自己可以理解并排除故障。

7 个答案:

答案 0 :(得分:21)

使用绑定。

请注意,必须遵循MVC模式才能从绑定中获得最大收益。 这比看起来容易,因为Cocoa现在几乎为你做了一切:

  1. 查看:NSView和子类(当然),NSCell和子类,NSWindow和子类
  2. 控制器:NSController和子类(尤其是NSArrayController
  3. 型号:核心数据
  4. 如果您不打算使用Core Data,那么您可以使用自己的模型对象,但这很容易。大多数这些对象的方法都是简单的访问器,如果你的目标是Leopard,你只需@synthesize

    你通常无法避免编写任何代码,但Bindings可以让你编写很少的代码。

    推荐阅读:

答案 1 :(得分:8)

绑定本质上看起来很神奇。要理解绑定背后的魔力,我认为必须彻底了解KVC / KVO。我真的很清楚。

然而,在我的情况下(Obj-C的新手 - 9个月),一旦我得到KVC / KVO绑定是一种刺激。它大大减少了我的胶水代码,使我的生活变得更加轻松。调试绑定成为确保我的键值更改是可观察的情况。我发现我可以花更多的时间来编写我的应用程序应该做的事情,而不是确保视图反映数据。

我确实同意,尽管绑定最初是非常令人生畏的。

答案 2 :(得分:5)

我的一般方法是尽可能使用绑定开始,看看情况如何。但是,如果某个特定的界面元素使用绑定开始变得有问题,或者比它的价值更多的努力,那么我会毫不犹豫地回到使用更传统的方法(例如数据源,操作)时才有意义。我发现这些东西可能很难提前预测,但我认为从长远来看,偏好绑定更好,只要你不在他们不提供的情况下坚持使用它们过于教条任何好处。

答案 3 :(得分:4)

在使用Bindings一段时间后,我发现它根本不是魔术,认为它是足够先进的技术。调试绑定接口采用与粘合接口不同的技术,但是一旦掌握了这些技术,重用,可维护性和一致性方面的优势就显得非常重要。

答案 4 :(得分:2)

似乎我在我的应用程序中使用绑定,KVO和数据源方法。这取决于具体情况。例如,在我的一个项目中,除了主窗口的大纲视图之外,我几乎使用绑定,这很复杂,我甚至不想尝试将它装入NSTreeController。同时我还使用KVO重新加载UI对象并跟踪模型对象中的依赖项。

在学习Bindings或Core Data等高级Cocoa主题时要记住的重要一点是,你必须了解它们背​​后的所有技术;从数据源协议,通知KVO等一切。一旦你有足够的经验与他们一起工作以了解“神奇”是如何工作的,你就能够轻松地将更高级别的东西集成到你的应用程序中。

在您的特定情况下,您必须决定是否值得在开发应用程序之前学习绑定的额外时间。如果可能的话,使用绑定开发应用程序的简化原型可能会对您有所帮助,因此您知道在开始实际项目时如何最好地将各个部分组合在一起。

答案 5 :(得分:2)

我的意见是,你应该采用绑定;现在,这项技术已被充分理解和稳定,并且值得为您不再需要编写的代码量做。当我第一次切换到绑定时,我在观察和观察对象的生命周期以及UI断裂时遇到了很多麻烦,因为它正在观察一个有效的对象,但是不正确的对象。一旦你看到这些问题几次,知道如何避免它们以及如果它们确实出现如何发现它们变得简单明了。伊什。我仍然希望“此事件在这里引起了此更新”在调试器中的痕迹,但我仍然很高兴我采取了行动。

答案 6 :(得分:1)

对于好奇,我最终使用绑定,几天后他们突然开始“有意义”。所以我肯定会建议你继续花时间学习它们。

我也发现布莱恩·韦伯斯特的建议非常有帮助,因为我确实最终用老式的方式做了一些事情,要么因为绑定不能做我想要的事情,要么因为做那些事情会非常复杂我需要使用绑定。