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

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

诸如:

-(void) test {

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

    NSLog(@"%@", str1);

    

    NSString *str2 = [[NSString allocinitWithFormat:@"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 = [NSString stringWithFormat:@"fast, %@"@"呵呵"];

    NSLog(@"%@", autoReleaseStr);

    

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

    NSLog(@"%@", notAutoReleaseStr);

    [notAutoReleaseStr release];

}


-(void) test {

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

    NSLog(@"%@", autoReleaseStr);

    [autoReleaseStr retain];

    [autoReleaseStr release];

    

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

    NSLog(@"%@", notAutoReleaseStr);

    [notAutoReleaseStrdealloc];

}


不过我还是有一个疑问:

[notAutoReleaseStr dealloc] 与 [notAutoReleaseStr release] 到底有什么区别?

找到了一个帖子:

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

dealloc是销毁。

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





posted on 2011-11-29 18:48  yang3wei  阅读(265)  评论(0编辑  收藏  举报