2011-04-23 37 views
2

这可能是另一个厚厚的新手问题,它会让所有人都拍打额头,然后“Duhhhhh!”但是,在阅读和观看无数布拉德拉森视频之后,我仍然感到困惑,因为总的来说代表团和CALayer代表团似乎是这样一个神秘的主题。为什么班级代表团如此神秘?

所有的书籍和Larson博士都在谈论'不要分类CALayers',除非你想要高度的封装,但是我找不到任何CALayer代表团可以提供的简洁实惠的例子。每个人似乎都使用主机视图控制器对象作为一种敷衍的委托,或者将所有东西都铲入应用程序委托中“作为可实现内容的简要示例”。

我正在尝试学习“最佳实践”,因为我太新了,因为我不想开发任何不好的或不稳定的编程特性 - 所以我很想研究每一个新的步骤我详细记录。从我可以收集的信息来看,CALayer委托类只包含约3个与委托相关的方法。这些是'displayLayer:','drawLayer:InContext:'和'actionForLayer:ForKey:'。在我的Opacity生成的Quartz中,我使用了颜色变量,我想在运行时操作,并且不需要对CALayer进行子类别化。使用键值对的副作用之一是存在一个名为“defaultValueForKey:”的类方法,它根据用于识别它们的键值来描述我的颜色的初始值。这不是(显然)CALayer委托方法。那么如何在不对CALayer进行子分类的情况下实现此代码(后者全部只设置默认值)?看起来,只要您只需要少数特定于代表的方法,委派就可以了。

任何人都可以解释为什么,实施委托时,在苹果的挤入并没有简单地从类单位转方法定义编译单元所分配的代表单元。例如只需在该类(或子类)中通常可用的每种方法的前面放置一个初始参数; 'forLayer :(CALayer *)TheRest:OfThe:方法'?通过这种方式,一个简单的开关或if-then栈可以将类的常用方法应用到一个集中对象 - 委托中。

正如我在开始时说,我可能失去了一些东西很基本的,但任何人都可以告诉我怎么inits实现我所有的键值颜色变无子类的CALayer?

在此先感谢, V.V.

回答

2

你在想这一切。正如你所提到的,你对平台很陌生。 Cocoa中有很多成语,但其中的一个成语有点像Perl:“有多种方法可以做到这一点”。

Cocoa还有代表团的历史,因为很多时候,你只需要一个或两个方法,和谁想要数不胜数的班级,几个方法的复杂性。代表让你以简单的方式解决这个问题。

所以,基本上而不是分析一切从从总体工程点,只需使用该平台。写一些代码。用“错误的方式”写一些代码。写很多。

为什么?因为如果这是“错误的方式”,你会感觉到它自己。你会开始诅咒它维护什么,然后你会发现“正确的方式”。什么是“正确的方式”?感觉更好的方式。

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

编写代码。写很多。你写得越多,你就会感觉到什么时候什么技术是对的,哪一个是错的。或者,现在之前的正确方式成为错误的方式,应该重新构建新的正确方式。

因为什么是对的或者现在可能不会晚。