方法中使用到的NSString是否需要dealloc?

一直存在一个疑惑,就是如果在一个方法中使用到了NSString,那这个NSString对象是否需要调用dealloc方法释放内存呢?

诸如:

-(void) test {

NSString*str1 = [NSStringstringWithFormat:@"fast, %@",@"呵呵"];

NSLog(@"%@", str1);

NSString*str2 = [[NSStringalloc]initWithFormat:@"fast,呵呵"];

NSLog(@"%@", str2);

}


是否使用完毕就不用管了呢,objective-c帮我们完成后续的所有清理工作?

遗憾的是,事实并不是这样的!

google了一下,获得以下有价值的情报

参见帖子:[[NSString alloc] initWith......]与[NSString stringWith......]有什么区别?

http://www.cocoachina.com/bbs/read.php?tid-6671.html

MVP言论:

1。用了alloc的就需要手动release,
[NSString stringWith......] 相当于 [[[NSString alloc] initWith......]autorelease],编译器自己会release

2。alloc, new 都需要自己release

3。一个是类方法,一个是实例方法
类方法都相当于自动声明 autorelease
实例方法需要 自己声明或手动释放

4。后者是atuorelease,后者如果要release要retain一下!!

参照上述言论,得出结论,像下面这么写都是没问题的:

-(void) test {

NSString*autoReleaseStr = [NSStringstringWithFormat:@"fast, %@",@"呵呵"];

NSLog(@"%@", autoReleaseStr);

NSString*notAutoReleaseStr = [[NSStringalloc]initWithFormat:@"fast,呵呵"];

NSLog(@"%@", notAutoReleaseStr);

[notAutoReleaseStrrelease];

}


-(void) test {

NSString *autoReleaseStr = [NSString stringWithFormat:@"fast, %@", @"呵呵"];

NSLog(@"%@", autoReleaseStr);

[autoReleaseStr retain];

[autoReleaseStr release];

NSString *notAutoReleaseStr = [[NSStringalloc]initWithFormat:@"fast,呵呵"];

NSLog(@"%@", notAutoReleaseStr);

[notAutoReleaseStrdealloc];

}


不过我还是有一个疑问:

[notAutoReleaseStrdealloc] 与[notAutoReleaseStrrelease] 到底有什么区别?

找到了一个帖子:

[一般问题]dealloc和release的区别?

dealloc是销毁。

retain 和release 两个方法分别是将reference counter 加1和减1.
当使用release方法当reference counter值为0时会自动使用dealloc方法。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值