使用iPhone上的obj-c,自动释放所有内容而不是释放是否有任何伤害?

Chr*_*ris 2 iphone objective-c

使用iPhone上的obj-c,自动释放所有内容而不是释放是否有任何伤害?

例如,这段代码:

NSString *recipe = [[NSString alloc] initWithUTF8String:sqlite3_column_text(dbps,0)];
[arr addObject:recipe];
[recipe release];
Run Code Online (Sandbox Code Playgroud)

当我创建它时,可以通过自动释放配方nsstring缩短为两行:

NSString *recipe = [[[NSString alloc] initWithUTF8String:sqlite3_column_text(dbps,0)] autorelease];
[arr addObject:recipe];
Run Code Online (Sandbox Code Playgroud)

这有什么缺点吗?我发现它更适合我的编码风格.谢谢大家.

Ole*_*ann 6

缺点是对象稍后会被释放.在大多数情况下,这不会是一个问题,但如果您在紧密循环中分配和自动释放数千个对象,这种开销可能会增加到影响性能甚至导致应用程序内存不足的程度.

无论如何,您可能想要使用:

[NSString stringWithUTF8String:sqlite3_column_text(dbps,0)];
Run Code Online (Sandbox Code Playgroud)

代替

[[[NSString alloc] initWithUTF8String:sqlite3_column_text(dbps,0)] autorelease];
Run Code Online (Sandbox Code Playgroud)