Является ли «self» единственным способом вызова другого метода того же экземпляра из метода экземпляра? - PullRequest
4 голосов
/ 05 июля 2011

Я читал «Язык программирования Objective-C» от ​​Apple, я заметил, что если вы скажете,

Класс A / W, методы MA и MB, где MA вызывает MB с «[self MB]Msgstr ".

Если вы подкласс класса A, давайте назовем его SubClass A и перегрузим MB.Сделал экземпляр SubClass A и вызвал MA, он будет использовать новый MB.Теперь, если вы вместо этого вызовете «[super MA]», он будет все еще использовать новый МБ.

Я прав?

Так что мне было интересно, если «я»это «правильный» способ сделать это, вызывая другие методы в том же экземпляре, или если он используется только для особых ситуаций, таких как покрытие инициализаторов.

Ответы [ 4 ]

3 голосов
/ 05 июля 2011

Да, self - это правильный способ отправить сообщение тому же экземпляру, на котором выполняется метод.

Одна из важных вещей, о которых следует помнить об объектной модели языков, таких как Objective-C, заключается в том, что концептуально вы не "вызываете методы" - вы отправляете сообщения .Вы говорите объекту, что делать, а не как это делать.Обычно вам не нужно думать о том, какой точный метод будет выполняться при отправке сообщения - объект должен отвечать соответствующим образом.Таким образом, если кто-то переопределил этот метод «MB», возможно, новое поведение - это то, как он хочет, чтобы объект отвечал, когда он получает сообщение «MB».Если кто-то переопределил «МБ» так, что он больше не может использоваться, как старый метод, то это звучит как ошибка.

1 голос
/ 05 июля 2011

Да, это так.Использование self внутри вашего класса - это правильный путь, если вы хотите вызывать методы из одного класса.'self' представляет текущий экземпляр класса, в котором вы его используете.

0 голосов
/ 05 июля 2011

В подклассе A вам не нужно создавать экземпляр, вы можете получить доступ к любой функции подкласса A с помощью sing self.создание нового объекта создает новый экземпляр, поэтому он повторно инициализирует все свойства для этого экземпляра.так что с этим ничего нельзя сделать правильно.

self always be right for accessing same class methods and property.

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

И [super MA] должен вызывать методМетод МА класса A, ни один случай, в котором MB вызывает вызов MA.

Я протестировал его, здесь нет ошибки, все концепции ООП следуют цели: Вы можете вызвать метод суперкласса, вызвав метод для ключевого слова super.

Так что, вероятно, вы делаете что-то не так.просто проверьте это.

0 голосов
/ 05 июля 2011

self - верный путь.Каждый метод в Objective-C можно рассматривать как «виртуальный» (на языке C ++).

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