一直存在一个疑惑,就是如果在一个方法中使用到了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的区别?
当使用release方法当reference counter值为0时会自动使用dealloc方法。
本文深入探讨了Objective-C中NSString对象的内存管理,包括alloc与withFormat方法的区别,以及如何正确地使用和释放资源。通过示例代码解释了自动与手动释放的概念,并详细阐述了dealloc和release方法的作用。
663

被折叠的 条评论
为什么被折叠?



