Мысли о времени выполнения объекта - PullRequest
1 голос
/ 20 февраля 2012

Поправь меня, если я ошибаюсь в своей логике.

В Java мы можем вызывать методы, подобные этому

Object.doSomething(); // here we call method directly

В объекте мы делаем

[object doSomething]; 

Здесь сообщение doSomething отправляется объекту. Как я знаю, у каждого объекта есть указатель isa, который указывает на класс объекта. Во время выполнения Objc используйте этот указатель, чтобы проверить, есть ли у класса объекта такой метод. Если метод найден, вызывается objc_msgSend.

Здесь я в замешательстве.

В чем разница между вызовами методов в Java и сообщениями в Objc?

Каковы преимущества / недостатки между ними?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Вы не понимаете, как работает objc_msgSend, objc_msgSend - это само отправляющее сообщение, нет проверки, чтобы определить, содержит ли класс метод первым.Это обрабатывается отправляющей структурой.Это позволяет перенаправлять сообщения классам во время выполнения, например NSProxy.

0 голосов
/ 20 февраля 2012

Маршрутизация сообщений выполняется во время выполнения (objc) - привязка метода во время компиляции (java).Среда выполнения objc разрешает метод во время выполнения и может найти что-то в классе / суперклассе, переслать его другому объекту (forwardInvocation) или выполнить сбой (метод не найден).Вот почему objc ppl говорит о сообщениях (динамический), а java ppl говорит о методах (статический).Преимущество - более динамичное поведение, недостаток - возможная ошибка во время выполнения.

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