我对代码感到困惑,我的问题是为什么我在释放后获得变量的价值。
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
当我将序列保留计数增量分配为1时,我没有其他代码保留计数增量。所以我的问题是在释放后消息保留计数将为0并且对象将被释放,我不应该得到值。 ////////////////////////////////////////////////// //////////////// 大家好我找到了答案,但背后的逻辑对我来说并不清楚,如果我把“我”放在整数后它给出了所需的输出。请你帮忙。
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
答案 0 :(得分:1)
当您在对象上发送释放消息时,该对象实际上没有从内存中删除。释放消息仅将引用计数减1。如果引用计数为零,则将对象标记为空闲。然后系统将其从内存中删除。在发生此解除分配之前,您可以访问您的对象。即使释放对象,对象指针仍然指向对象,除非您为指针指定nil。