-2

我真的对代码感到困惑,我的问题是为什么我在发布后得到变量的值。

NSNumber *a=[[NSNumber alloc]initWithInt:2];
NSNumber *b=[[NSNumber alloc]initWithInt:3];
b=a;

[a release];
[b release];
NSLog(@"a=%@",a);
NSLog(@"b=%@",b);

输出:a=2 b=2

当我分配veriables保留计数增加1时,我没有其他保留计数增加的代码。所以我的问题是发布消息后保留计数将为0并且对象将被释放并且我不应该获得该值。///////////////////////////////////////// ////////////// 大家好,我找到了答案,但它背后的逻辑我不清楚,如果我在整数后面加上“I”,它会给出所需的输出。Will请你帮忙。

NSNumber *a=[[NSNumber alloc]initWithInt:2I];
NSNumber *b=[[NSNumber alloc]initWithInt:3I];
b=a;

[a release];
[b release];

NSLog(@"a=%@",a);
NSLog(@"b=%@",b);

输出:a=0 b=0

4

1 回答 1

0

当您在对象上发送释放消息时,该对象实际上并没有从内存中删除。释放消息只是将引用计数减一。如果引用计数为零,则该对象被标记为空闲。然后系统将其从内存中删除。在此释放发生之前,您可以访问您的对象。即使您释放对象,您的对象指针仍然指向该对象,除非您将 nil 分配给指针。

于 2013-08-07T05:40:24.997 回答