Методы класса и экземпляра с одинаковым именем - PullRequest
1 голос
/ 24 ноября 2011

Я смотрю на пример сети MVC от Apple и обнаружил, что в классе PhotoGallery автор создал экземпляры и классовые версии метода abandonGalleryCacheAtPath::

В строке 139:

+ (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath

В строке 457:

- (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath

Кажется, что все, что делает экземпляр метода, - это запись в журнал перед вызовом метода класса следующим образом:

[[QLog log] logWithFormat:@"gallery %zu abandon '%@'", (size_t) self.sequenceNumber, [galleryCachePath lastPathComponent]];
[[self class] abandonGalleryCacheAtPath:galleryCachePath];

Сообщение журнала включает self.sequenceNumber, который является переменной экземпляра, которая не будет доступна для метода класса.

Пара вопросов:

  1. Будет ли система автоматически перенаправлять вызовы к нужному методу, например, если другой класс вызовет метод self abandonGalleryCacheAtPath:abc, тогда будет выполнена классовая версия метода, и если другой экземпляр вызовет методЗатем будет выполнена версия экземпляра метода?
  2. Как вы думаете, автор реализовал метод экземпляра исключительно для того, чтобы можно было записать значение sequenceNumber?Есть ли какие-либо другие конструктивные / технические преимущества такого двойного внедрения?

1 Ответ

2 голосов
/ 24 ноября 2011

Поскольку в Objective C используется динамическое связывание методов, система автоматически направляет вызовы к методу Class или Instance в зависимости от контекста, в котором был сделан вызов.См. Objective-C использует динамическое связывание, но как?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...