为什么班级代表团如此神秘?

时间:2011-04-23 21:02:19

标签: delegates calayer delegation

这可能是另一个厚厚的新手问题,每个人都会打扰他们的额头,然后去'Duhhhhh!'但是,经过另一段长时间的阅读和观看无数布拉德拉尔森的视频后,我感到困惑的是为什么一般的代表团和特别是CALayer代表团似乎是一个如此神秘的主题。

除非你想要高度封装,否则所有书籍和Larson博士都会谈到“不对CALayers进行细分”,但我找不到CALayer代表团可以提供的简洁和实例的好处。每个人似乎都使用主机视图控制器对象作为一个类型,敷衍的委托,或者他们将所有内容都集中到App代理中“作为可以实现的内容的简短示例”。

我正在努力学习“最佳实践” - 因为我很新,而且因为我不想发展任何糟糕或邋sc的编程特征 - 所以我很想检查每一个新步骤详细介绍细节。根据我的收集,CALayer委托类只有大约3个特定于委托的方法。这些是'displayLayer:','drawLayer:InContext:'和'actionForLayer:ForKey:'。在我的Opacity生成的Quartz中,我使用了颜色变量,我希望在运行时操作它,而不需要对CALayer进行子类化。使用键值对的一个副作用是存在一个名为'defaultValueForKey:'的类方法,它根据用于标识它们的键值来描述我的颜色的初始值。这不是(显然)CALayer委托方法。那么如何在不对CALayer进行子类化的情况下实现此代码(之后,所有只设置默认值)?只要您只需要少量特定于委托的方法,似乎委托就可以了。

有人可以解释为什么在实施委托时,Apple的boffins并不是简单地将方法定义编译单元从类单元转换到指定的委托单元。例如只需将一个初始参数放在类(或子类)中通常可用的每个方法的前面; 'forLayer:(CALayer *)TheRest:OfThe:method'?这样一个简单的开关或if-then堆栈就可以在一个集中对象 - 委托中应用类的常用方法。

正如我在开始时所说的那样,我可能会遗漏一些非常基本的内容,但有人能告诉我如何在不对CALayer进行子类化的情况下实现所有键值颜色变量的内容吗?

提前致谢, V.V。

1 个答案:

答案 0 :(得分:2)

你在想这一切。如你所说,你是平台的新手。 Cocoa中有很多成语,但其中一个成语有点像Perl:“有不止一种方法可以做到这一点。”

Cocoa具有委托历史,因为在很多时候,你只需要一两个方法,并且只需要很少的方法就可以获得数百个类的复杂性。代表们让您以简单的方式解决这个问题。

因此,基本上不是从整体工程角度分析所有内容,只需使用平台即可。写一些代码。写一些代码“错误的方式”。写下很多。

为什么呢?因为如果这是“错误的方式”,你会自己感受到它。你会开始在维护或其他什么时候诅咒它,然后你会找出“正确的方法”。什么是“正确的方式”?对你感觉更好的方式。

这些决定中的大多数对性能等影响很小,所以不要担心。因此,选择哪种技术并不重要。

编写代码。写下很多。你写的越多,你就越能感受到哪种技术是正确的,哪一种是错的。或者,在此之前正确的方式成为错误的方式,并应以新的正确方式重构。

因为现在的正确或错误可能不会更晚。