将一个对象分配给另一个对象时,实际发生了什么,保留对象的整个副本?

时间:2011-03-18 14:36:17

标签: iphone objective-c cocoa cocoa-touch xcode

classA{

    classB objB=[[classB alloc]init];

    objB.hasAnotherRef=self;


 }


classB{

    classA hasAnotherRef;


}

从上面的内容将classA本身分配给classB ivar hasAnotherRef?

我的问题是

classA有classB,然后classB再次有classA by objB.hasAnotherRef = self; 此行。

那么classA和classB的对象大小是多少。

我很困惑。

哪个是最大的?

3 个答案:

答案 0 :(得分:2)

这里的关键是Objective-C对象总是指针。如果不是这个事实,两个结构的大小将是无限的(由于循环引用)。在适当的Objective-C中,类看起来像这样:

@class classA;
@class classB;

@interface classA {
    classB * objB;
}
@end

@interface classB {
    classA * objA;
}
@end

在这种情况下,两个类的大小都是一个指针的大小。

答案 1 :(得分:1)

使用这种伪代码无济于事。使用将编译的真实代码。

设置实例变量不会以任何方式改变对象的大小。 classA的所有实例都具有一个对象地址的存储空间。 classB的所有实例都有一个对象地址的存储空间。

该对象是什么并不重要,它可以是一百万个字符串的数组,它不会影响classA或classB实例的大小。

答案 2 :(得分:1)

我对你的问题不是很清楚,但我想你问的是对象是否在赋值时被值复制了。如果这就是你得到它,那么你的问题的答案就是当对象被分配给另一个对象时,它的大小不会增大。而是设置指向对象的指针。