分配B = A后,对象A和B的引用计数是多少?

时间:2015-06-17 16:25:33

标签: objective-c reference-counting retaincount

在此代码中分配A后,BB=A的引用次数是多少?

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

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

2 个答案:

答案 0 :(得分:0)

取决于您是否使用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

答案 1 :(得分:0)

这个问题似乎是由于对象指针与这些对象之间缺乏区别所致。代码运行后,AB指向对象具有相同的引用计数值,因为它们是同一个对象。赋值操作不会更改对象的计数,并且指针没有保留计数。只有对象才有。

通常会谈论对象,就好像它们与指针一样 - “将对象A传递给方法” - 因为a)大部分都没有相关的区别,并且b)它们可以只能通过指针访问。这是存在相关差异的时期之一。

(在赋值之后,B最初指向的对象已被泄露:它具有正保留计数但没有指向它。)