Я полагаю, в соответствии с «Cocoa Design Patterns» книги я читаю, что функция сохранения реализуется с помощью что-то вроде этого:Подсчет ссылок в какао
- (int)retainCount
// Returns the receiver's current reference count
{
int result = 1; // receiver not in table, its count is 1
void *tableValue = NSMapGet(
[[self class] _myRefCountMapTable], self);
if(NULL != tableValue)
{ // if receiver is in table, its count is the value stored
result = (int)tableValue;
}
return result;
}
- (id)retain
// Increases the receiver's reference count
{
// store the increased value in the table
NSMapInsert([[self class] _myRefCountMapTable], self,
(void *)([self retainCount] + 1));
return self;
}
В качестве примера подразумевают каждый опорный объект имеет один и тот же сам член. Как это происходит? может быть, я не понимаю смысла самого себя, хотя это похоже на «это» на C++.
Если я просто использую оператор присваивания (A = B) Скопирует ли он указатель (self) и все? Хотя я бы использовал «copywithzone», а его родственники и «я» члены не были равны. Более того, я, хотя copywithzone, как конструктор копирования в C++.
Наверное, я запутался между двумя мирами.
Как и в сценарии в commennt выше вашего, вызов [objB keep] и вызов [objA keep] будет содержать другой параметр «self», как вы сказали, что сделает мой пример функции «сохранить» неправильным. Так кто же это? Мое понимание ? Потому что я уверен, что пример верен. Я просто означаю, что присваивание типа "SObject * objB = objA;" приведет к тому, что функция сохранения обоих объектов будет иметь одинаковую «я» при вызове (или любой другой функции) – Idan
Да, ваше понимание. См. Последний абзац ответа Эйко о том, что происходит в вашей реализации 'keep'. Когда вы назначаете 'objB = objA', нет« обоих объектов »; существует один объект, указатель которого находится в двух переменных. В этом случае '[objA keep]' и '[objB keep]' будут отправлять сообщение 'keep' одному и тому же объекту, что означает, что они будут запускать одну и ту же реализацию' keep', и эта реализация получит одинаковое значение 'self' оба раза. –
Отлично, это почти то, о чем я думал, как вы можете видеть из моей последней строки комментариев выше. Большое спасибо! – Idan