我想知道以这种方式声明NSString的缺点和/或优点有什么区别:
NSString *noInit = [NSString stringWithFormat:@"lolcatz %d", i];
Run Code Online (Sandbox Code Playgroud)
而不是:
NSString *withInit = [[NSString alloc] initWithFormat:@"Hai %d", i];
Run Code Online (Sandbox Code Playgroud)
放置stringWithFormat
而不仅仅是initWithFormat
初始化字符串的方式是什么动机?
mip*_*adi 33
stringWithFormat:
返回一个自动释放的字符串; initWithFormat:
返回一个必须由调用者释放的字符串.前者是一种所谓的"便利"方法,对短期字符串很有用,因此调用者不必记住调用release
.
实际上,我昨天刚看到这个关于内存优化的博客条目。在其中,作者给出了他选择使用[[NSString alloc] initWithFormat:@"..."]
而不是[NSString stringWithFormat:@"..."]
. 具体来说,如果您创建自动释放对象,iOS 设备可能不会像您希望的那样立即自动释放内存池。
前一个版本要求您手动操作release
,结构如下:
NSString *remainingStr = nil;
if (remaining > 1)
remainingStr = [[NSString alloc] initWithFormat:@"You have %d left to go!", remaining];
else if (remaining == 1)
remainingStr = [[NSString alloc] initWithString:@"You have 1 left to go!"];
else
remainingStr = [[NSString alloc] initWithString:@"You have them all!"];
NSString *msg = [NSString stringWithFormat:@"Level complete! %@", remainingStr];
[remainingStr release];
[self displayMessage:msg];
Run Code Online (Sandbox Code Playgroud)
在这里,remainingStr
只是暂时需要,因此为了避免自动释放(这可能会在程序的后期发生),我在需要时明确处理内存。
归档时间: |
|
查看次数: |
16983 次 |
最近记录: |