В качестве примера подразумевается каждый ссылочный объект…
Не существует такого понятия, как «эталонный объект». Я подозреваю, что это не то, что вы имели в виду, поэтому, пожалуйста, уточните.
имеет того же самого члена.
Объекты не имеют членов (экземпляры имеют переменные экземпляра, которые похожи по концепции, но не одинаковы по реализации).
self
не является ни «членом», ни переменной экземпляра. Обратите внимание, что классы также имеют self
. self
- это специальный скрытый аргумент сообщения, содержащий объект, который является получателем сообщения.
И нет, self
не относится к каждому объекту сразу. Если вы отправляете одно и то же сообщение двум разным объектам, даже одного и того же класса, аргумент self
будет содержать разные указатели в каждом сообщении.
может быть, я не понимаю смысла "я" - хотя в C ++ это похоже на "это".
Как я понимаю "this
", да. self
- это объект, который получил сообщение - в ваших примерах, объект, который что-то хранит или запрашивает счет сохранения.
Если я просто использую оператор присваивания (A = B) Копирует ли он указатель (self) и все?
Скопированный указатель будет только self
, если B
равен self
. То есть, если вы скажете A = self
, он скопирует указатель self
в A
. Если вы говорите B = self
, а затем говорите A = B
, то же самое, поскольку B
и self
содержат один и тот же указатель. Если вы не сказали B = self
, то B
, вероятно, является другим значением, поэтому другое значение будет скопировано в A
. И это при условии, что A
и B
являются переменными указателя.
Он скопирует значение (указатель), который вы скажете ему скопировать. Больше ничего.
Я думаю, что он будет использовать "copywithzone", и его родственники и члены "self" не будут равны.
Нет. Объекту отправляется сообщение copyWithZone:
(не пропускайте двоеточия - они значимы), когда что-то отправляет ему сообщение copyWithZone:
. Самый распространенный способ - отправить ему сообщение copy
, так как оно будет отправлять сообщение copyWithZone:
по очереди.
Кроме того, даже «копия» не всегда копирует объект. Неизменяемые объекты могут реализовать copyWithZone:
для возврата [self retain]
вместо.
Однако простое назначение никогда не копирует объект. Он только копирует указатель.
Более того, я думаю, что copywithzone похож на конструктор копирования в c ++.
Грубо. Я не знаю достаточно C ++, чтобы сказать, насколько это нравится.