Как внутреннее наблюдение за реализацией ключа? - PullRequest
7 голосов
/ 22 марта 2011

Я получил ответ о Основе магии на этот вопрос: Какой самый * простой * способ реализации простого объекта данных, который соответствует наблюдению значения ключа?

Что за магия? Как это работает внутри? Поскольку использование фреймворка опасно, я не могу понять его внутреннее поведение, я хочу знать его поведение. В настоящее время я не могу понять, как это работает без каких-либо определений методов.

Ответы [ 2 ]

10 голосов
/ 22 марта 2011

Документация Apple описывает, как KVO реализован внутри компании.

Суть этого в том, что когда вы регистрируете наблюдателя на объекте, платформа динамически создает подкласс исходного класса объекта и настраивает объект для отображения в качестве экземпляра этого нового динамического класса. Это можно увидеть, если осмотреть объект в отладчике после того, как на нем зарегистрирован наблюдатель.

Этот новый класс перехватывает сообщения для объекта и проверяет их на предмет соответствия определенным шаблонам (таким как методы получения, установки и доступа к коллекции).

4 голосов
/ 22 марта 2011

В двух словах: объявление @property в Objective-C 2.0 создает методы доступа для именованного свойства, поэтому являются определениями методов.@property - это просто краткий способ их определения, позволяющий избежать большого количества повторяющегося шаблонного кода.

Когда вы наблюдаете свойство, создается частный подкласс, который реализует средства доступа, которые вызывают соответствующие методы уведомления до и после изменениястоимость имущества.Затем для изменения класса наблюдаемого объекта используется методика, известная как «Иза свизлинг».

...