现在的位置: 首页 > 综合 > 正文

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

2018年05月18日 ⁄ 综合 ⁄ 共 1528字 ⁄ 字号 评论关闭

一直存在一个疑惑,就是如果在一个方法中使用到了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方法。

抱歉!评论已关闭.