NSString *string=[temp objectAtIndex:row];
[temp removeObjectAtIndex:row];
创建string
的对象不再存在;我假设这种语法是直接赋值,因此string
不应该存在,对吧?
因此我要么使用stringWithFormat
从对象创建新字符串,要么将retain
发送到string
以确保安全,这是正确的推理吗?
答案 0 :(得分:2)
假设您没有使用ARC或垃圾回收,是的,您对该对象的内存管理的推理是正确的†。但是,您不希望使用stringWithFormat:
。这需要一个格式字符串,如果你传递的东西不是特别的意思,它可能会失败。您可以使用以下其中一个:
stringWithString:
如果您不想要所有权
copy
如果你只是想确保你对字符串有一个安全的引用(如果你不打算长期保持引用,可选择autorelease
)< / p>
retain
如果你肯定想保留相同的对象 - 即使它是一个可变的字符串 - 并且确实想要所有权(你可能不想要这个选项,因为它与{{1}的主要区别是字符串可能会在你下面发生变异)
†通过“正确”,我的意思是你是对的,你不应该在这一点上对物体的生命周期做任何假设。它可能还活着,但技术上并不是一个安全的假设。认为值得一提,因为有些人在这一点上并不是百分之百清楚。