при присвоении одного объекта другому, что происходит на самом деле, сохранение или полная копия объекта? - PullRequest
1 голос
/ 18 марта 2011
classA{

    classB objB=[[classB alloc]init];

    objB.hasAnotherRef=self;


 }


classB{

    classA hasAnotherRef;


}

Исходя из вышесказанного, что происходит при назначении самого classA для classB ivar hasAnotherRef?

Мой вопрос:

classA имеет classB, тогда classB снова имеет classA на objB.hasAnotherRef = self; эта строка.

Так, каков размер объектов класса A и класса B.

Я так растерялся.

Чтосамый большой по размеру?

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Ключевым моментом здесь является то, что объекты Objective C всегда указатели . Если бы не этот факт, размер обеих структур был бы бесконечным (из-за циклической ссылки). В надлежащем Objective-C классы будут выглядеть примерно так:

@class classA;
@class classB;

@interface classA {
    classB * objB;
}
@end

@interface classB {
    classA * objA;
}
@end

В этом случае размер обоих классов равен размеру одного указателя.

1 голос
/ 18 марта 2011

Я не совсем ясно по вашему вопросу, но Я думаю вы спрашиваете, копируются ли объекты по значению при назначении.Если это то, что вы получаете, то ответ на ваш вопрос заключается в том, что объект не увеличивается в размерах, когда он назначается другому объекту.Скорее, указатель на объект установлен.

1 голос
/ 18 марта 2011

Использование такого рода псевдокода не помогает. Используйте реальный код, который будет компилироваться.

Установка переменных экземпляра никоим образом не меняет размер объекта. Все экземпляры класса A имеют хранилище для адреса одного объекта. Все экземпляры класса B имеют хранилище для адреса одного объекта.

Неважно, что это за объект, это может быть массив из 1 миллиона строк, это не влияет на размер вашего экземпляра classA или classB.

...