iphone releas 后retatincount 为1

本文通过一个简单的测试程序探讨了Objective-C中retain/release方法的工作原理。预期对象在被释放后保留计数应减至0并被释放,但实验结果显示保留计数在第一次释放后仍为1。文章解释了这是由于当对象的保留计数为1时,再进行释放操作将直接导致对象被销毁,而非递减至0,这是一种实现上的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I created a simple program to test the retain/release methods in Objective-C memory management. As I understand of ObjC memory management, I expect that a object with retain count = 1 on which I callrelease get the retain count decremented to zero and then released. But this test program show that after the first release I still get retain count = 1:

// TestClass.h
#import <Cocoa/Cocoa.h>
@interface TestClass : NSObject {
}
@end

// TestClass.m
#import "TestClass.h"
@implementation TestClass
@end

// RetainRelease.m
#import <Foundation/Foundation.h>
#include "TestClass.h"

void dumpRetain(id o);

int main (int argc, const char * argv[]) {
    TestClass *s = [[TestClass alloc] init];
    dumpRetain(s);

    [s release];
    dumpRetain(s);
}

 

2010-08-13 17:42:45.489 RetainRelease[20933:a0f] NSString - retain count=1
2010-08-13 17:42:45.491 RetainRelease[20933:a0f] NSString - retain count=1

 

 

答案:

 it's implemented as "when the object is released with a retainCount of 1, it's deallocated", because there's no need to ever decrement it to 0. It's an implementation optimization.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值