Разница в ч / б Объективность С и С ++ это? - PullRequest
10 голосов
/ 28 сентября 2010

Может ли кто-нибудь определить разницу между собственным объектом C и C ++ по этому указателю?

Ответы [ 2 ]

22 голосов
/ 28 сентября 2010

Основное отличие состоит в том, что this является ключевым словом, а self является переменной. Результатом этого является то, что, хотя this всегда относится к объекту, выполняющему определенный метод, методы Objective-C могут изменять self во время выполнения. Это иногда используется конструкторами, которые устанавливают self = nil при сбое.

Причины для этого:

  • так, чтобы подклассы (которые инициализируют цепочку с self = [super init]) могли видеть, когда инициализация терпит неудачу, и знать, что они не продолжают в своих собственных инициализаторах.
  • составляющие объекты могут видеть сбой и знать, что у них нет действительного компонента.

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

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

6 голосов
/ 28 сентября 2010

Да.Один пишется сам.Другое пишется так.

Менее явно:

self используется в классах Objective-C для представления указателя текущего экземпляра.в классах C ++ для представления указателя текущего экземпляра.

Они выполняют аналогичные роли, но в совершенно разных структурах.

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