NSString *string=[temp objectAtIndex:row];
[temp removeObjectAtIndex:row];
创建的对象string
不再存在;我假设这种语法是直接赋值,因此string
应该不再存在,对吧?
所以要么我用stringWithFormat
从对象创建一个新字符串,要么发送retain
到string
安全的地方,这是正确的推理吗?
NSString *string=[temp objectAtIndex:row];
[temp removeObjectAtIndex:row];
创建的对象string
不再存在;我假设这种语法是直接赋值,因此string
应该不再存在,对吧?
所以要么我用stringWithFormat
从对象创建一个新字符串,要么发送retain
到string
安全的地方,这是正确的推理吗?
假设您没有使用 ARC 或垃圾收集,是的,您关于对象内存管理的推理是正确的†。但是,您不想使用stringWithFormat:
. 这需要一个格式字符串,如果你传递一些不是特别适合的东西,它可能会严重失败。您可以使用以下之一:
stringWithString:
如果你不想要所有权
copy
如果您只是想确保对字符串有一个安全的引用(autorelease
如果您不打算长期保留该引用,则可以选择使用)
retain
如果您确实想保留同一个对象——即使它是一个可变字符串——并且确实想要所有权(你可能不想要这个选项,因为主要区别copy
在于字符串可能在你下面发生变异)
† 通过“正确”,我的意思是你是对的,你不应该对对象的生命周期做出任何假设。它可能还活着,但从技术上讲,这不是一个安全的假设。认为值得一提,因为有些人在这一点上并不是 100% 清楚。