Вероятно, это еще один сложный вопрос новичка, который заставит всех хлопнуть себя по лбу и сказать: «Дааааа!» НО, после очередного долгого периода чтения и просмотра бесчисленных видеороликов Брэда Ларсона, я остаюсь озадаченным, почему делегирование вообще и делегирование CALayer в частности, кажется такой загадочной темой.
Все книги и д-р Ларсон говорят о «не подклассификации CALayers», если вы не хотите высокой степени инкапсуляции, но нигде я не нашел краткого и точного примера преимуществ, которые может предложить делегация CALayer. Кажется, что каждый использует либо объект контроллера представления хоста в качестве своего рода небрежного делегата, либо они сгребают все в делегат приложения «в качестве краткого примера того, чего можно достичь».
Я пытаюсь выучить «ЛУЧШУЮ ПРАКТИКУ» заранее - потому что я такой новый и потому что я не хочу развивать какие-то плохие или неряшливые черты программирования - поэтому я стремлюсь изучить каждый новый шаг, который я взять в мельчайших деталях. Из того, что я могу собрать, класс делегатов CALayer содержит только около 3 специфичных для делегата методов. Это 'displayLayer:', 'drawLayer: InContext:' и 'actionForLayer: ForKey:'. В моих сгенерированных Opacity Quartz я использовал цветовые переменные, которыми я хочу манипулировать во время выполнения, и делаю это без подкласса CALayer. Одним из побочных эффектов использования пар ключ-значение является то, что существует метод класса с именем defaultValueForKey:, который описывает начальное значение моих цветов в соответствии со значением ключа, используемым для их идентификации. Это НЕ (очевидно) метод делегата CALayer. Итак, как я могу реализовать этот код (который после всего устанавливает только значение по умолчанию) без подкласса CALayer? Похоже, что делегирование в порядке, если вам нужны только несколько специфичных для делегата методов.
Может ли кто-нибудь объяснить, почему при реализации делегирования сотрудники Apple не просто переносили модуль компиляции определения метода из модуля класса в назначенный модуль делегата. например Просто поместите начальный параметр перед каждым методом, обычно доступным в классе (или подклассе) по фразе; 'forLayer: (CALayer *) TheRest: OfThe: метод'? Таким образом, простой переключатель или стек if-then может применить обычный метод класса в одном централизованном объекте - делегате.
Как я уже сказал в начале, я, вероятно, упускаю что-то довольно простое, но кто-нибудь может мне сказать, как я реализую все свои переменные цвета для ключевого значения без подкласса CALayer?
Спасибо заранее,
* 1011 В.В. *