我假设根据我正在阅读的“Cocoa 设计模式”书,retain 函数是使用这样的东西实现的:
- (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;
}
如示例所示,每个引用对象都具有相同的 self 成员。这是怎么发生的?也许我不明白 self 的含义 - 我虽然它就像 C++ 中的“this”。
如果我只使用赋值运算符(A = B)它是否复制指针(自我),就是这样?我虽然它会使用“copywithzone”,但它的亲戚和“自我”成员不会相等。此外,我认为 copywithzone 就像 c++ 中的复制构造函数。
我想我在两个世界之间感到困惑。