这个NSString会不会存在?

时间:2012-08-07 08:09:48

标签: objective-c

   NSString *string=[temp objectAtIndex:row];
   [temp removeObjectAtIndex:row];

创建string的对象不再存在;我假设这种语法是直接赋值,因此string不应该存在,对吧?

因此我要么使用stringWithFormat从对象创建新字符串,要么将retain发送到string以确保安全,这是正确的推理吗?

1 个答案:

答案 0 :(得分:2)

假设您没有使用ARC或垃圾回收,是的,您对该对象的内存管理的推理是正确的†。但是,您不希望使用stringWithFormat:。这需要一个格式字符串,如果你传递的东西不是特别的意思,它可能会失败。您可以使用以下其中一个:

  • stringWithString:如果您不想要所有权

  • copy如果你只是想确保你对字符串有一个安全的引用(如果你不打算长期保持引用,可选择autorelease)< / p>

  • retain如果你肯定想保留相同的对象 - 即使它是一个可变的字符串 - 并且确实想要所有权(你可能不想要这个选项,因为它与{{1}的主要区别是字符串可能会在你下面发生变异)

†通过“正确”,我的意思是你是对的,你不应该在这一点上对物体的生命周期做任何假设。它可能还活着,但技术上并不是一个安全的假设。认为值得一提,因为有些人在这一点上并不是百分之百清楚。