Как метод Objective-C имеет доступ к ивару вызываемого? - PullRequest
2 голосов
/ 24 сентября 2011

Я читал документацию Apple, Язык программирования Objective-C (ссылка в формате PDF). На стр. 18, под Переменные экземпляра получателя , я видел это.

У метода есть автоматический доступ к экземпляру принимающего объекта переменные. Вам не нужно передавать их методу в качестве параметров. Например, описанный выше метод primaryColor не требует параметры, но он может найти основной цвет для otherRect и вернуть Это. Каждый метод предполагает приемник и его переменные экземпляра, без необходимости объявлять их как параметры.

Это соглашение упрощает исходный код Objective-C. Также поддерживает способ, которым объектно-ориентированные программисты думают об объектах и ​​сообщениях. Сообщения отправляются получателям так же, как письма доставляются на ваш Главная. Параметры сообщения приносят информацию извне получатель; им не нужно приводить получателя к себе.

Я пытаюсь лучше понять, что они описывают; это как параметр self Python или стиль?

Ответы [ 2 ]

9 голосов
/ 24 сентября 2011

Objective-C является строгим надмножеством C.

Таким образом, методы Objective-C являются «просто» указателями на функции, а экземпляры являются «просто» структурами C.

У метода есть два скрытых параметра. Первый - self (текущий экземпляр), второй _cmd (селектор метода).

Но документация, описанная на стр. 18, описывает доступ к переменным экземпляра класса из метода.

Он просто говорит, что метод класса может обращаться к переменным экземпляра этого класса. Это довольно просто с объектно-ориентированной точки зрения, но не с точки зрения Си.

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

1 голос
/ 24 сентября 2011

Хотя я бы не сказал, что это "удар" по отношению к Python, он, безусловно, относится к стилю ориентации объектов Python (который, честно говоря, происходит от "псевдообъектной ориентации", доступной в C действительно ли это ОО или нет - это спор для другого форума)).

Хорошо помнить, что у Python совершенно иная концепция области видимости, чем у остального мира & mdash; каждый метод более или менее существует в своей маленькой реальности. Это контрастирует с более «самосознающими» языками, которые либо имеют переменную «this», либо неявную конструкцию экземпляра некоторой формы.

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