Каково количество ссылок на объекты A и B после назначения B=A?

Что такое счетчик ссылок A а также B после назначения B=A в этом коде?

Class1 *A=[[Class1 alloc] init];
Class1 *B=[[Class1 alloc] init];

[A retain];
NSMutableArray *tempArray= [NSMutableArray alloc]init];
[tempArray addobject:A];
B=A;

2 ответа

Этот вопрос, кажется, возникает из-за отсутствия различий между объектами и указателями на эти объекты. После выполнения вашего кода объекты, на которые указывает A а также B имеют одинаковое значение счетчика ссылок, потому что это один и тот же объект. Операция присваивания не изменяет счет объекта, а указатели не сохраняют счет. Только объекты делают.

Об объектах часто говорят так, как если бы они были такими же, как их указатели. A в метод " - потому что а) по большей части нет соответствующей разницы, и б) они могут быть доступны только через указатель. Это один из случаев, когда есть существенная разница.

(После назначения объект, который B первоначально указывалось на утечку: у него есть положительный счет сохранения, но нет указателей на него.)

Зависит ли вы используете ARC, но так как у вас есть retain в вашем коде я предполагаю, что вы не используете ARC.

Class1 *A=[[Class1 alloc] init];

A: 1

Class1 *B=[[Class1 alloc] init];

A: 1, B: 1

[A retain];

A: 2, B: 1

NSMutableArray *tempArray= [NSMutableArray alloc]init];

A: 2, B: 1

[tempArray addobject:A];

A: 3, B: 1

ОБНОВИТЬ

B=A;

A:3, B:3 НО оригинальный B все еще существует с B':1

Другие вопросы по тегам