2

这可能是另一个厚实的新手问题,会让每个人都拍他们的额头并说“Duhhhhhh!” 但是,在又长时间阅读和观看了无数 Brad Larson 视频之后,我对为什么总体上的委托,特别是 CALayer 委托似乎是一个如此神秘的主题感到困惑。

除非您想要高度封装,否则所有书籍和 Larson 博士都在谈论“不要对 CALayers 进行子分类”,但我在任何地方都找不到 CALayer 委托可以提供的好处的简洁明了的例子。每个人似乎都将主机视图控制器对象用作某种敷衍的委托,或者他们将所有内容都放入 App 委托中,“作为可以实现的简短示例”。

我正在尝试预先学习“最佳实践”——因为我太新了,因为我不想发展任何糟糕或邋遢的编程特征——所以我热衷于检查我在几分钟内采取的每一个新步骤细节。据我所知,CALayer 委托类中只有大约 3 个委托特定的方法。它们是“displayLayer:”、“drawLayer:InContext:”和“actionForLayer:ForKey:”。在我的 Opacity 生成的 Quartz 东西中,我使用了我想在运行时操作的颜色变量,并且在没有子类化 CALayer 的情况下这样做。使用键值对的副作用之一是存在一个名为“defaultValueForKey:”的类方法,它根据用于识别颜色的键值来描述我的颜色的初始值。这(显然)不是 CALayer 委托方法。那么如何在没有子类化 CALayer 的情况下实现此代码(之后,所有代码都只设置一个默认值)?只要您只需要少数特定于委托的方法,委托似乎就可以了。

谁能解释为什么在实现委托时,Apple 的研究人员没有简单地将方法定义编译单元从类单元转移到分配的委托单元。例如,只需在类(或子类)中通常可用的每个方法前面放置一个初始参数即可;'forLayer:(CALayer *)TheRest:OfThe:方法'?这样,一个简单的 switch 或 if-then 堆栈可以将类的常用方法应用到一个集中的对象 - 委托中。

正如我在开始时所说,我可能遗漏了一些非常基本的东西,但谁能告诉我如何在没有子类化 CALayer 的情况下实现所有键值颜色变量初始化?

提前致谢,VV

4

1 回答 1

2

你都想多了。正如您所提到的,您是该平台的新手。Cocoa 中有很多成语,但其中一个成语有点像 Perl:“有不止一种方法可以做到”。

Cocoa 有委托的历史,因为很多时候,您只需要一两个方法,而谁想要使用很少方法的无数类的复杂性。代表让您以简单的方式解决这个问题。

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

为什么?因为如果是“错误的方式”,你自己会感觉到的。您将在维护或其他任何事情中开始诅咒它,然后您将找出“正确的方法”。什么是“正确的方法”?让您感觉更好的方式。

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

写代码。写很多吧。你写得越多,你就越能感觉到什么时候是正确的,什么时候是错误的。或者当之前的正确方式变成错误的方式并且应该重构为新的正确方式时。

因为现在对或错可能不会在以后。

于 2011-04-23T21:14:39.877 回答