Каково количество ссылок на объекты 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