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

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

所以要么我用stringWithFormat从对象创建一个新字符串,要么发送retainstring安全的地方,这是正确的推理吗?

4

1 回答 1

2

假设您没有使用 ARC 或垃圾收集,是的,您关于对象内存管理的推理是正确的†。但是,您不想使用stringWithFormat:. 这需要一个格式字符串,如果你传递一些不是特别适合的东西,它可能会严重失败。您可以使用以下之一:

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

  • copy如果您只是想确保对字符串有一个安全的引用(autorelease如果您不打算长期保留该引用,则可以选择使用)

  • retain如果您确实想保留同一个对象——即使它是一个可变字符串——并且确实想要所有权(你可能不想要这个选项,因为主要区别copy在于字符串可能在你下面发生变异)

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

于 2012-08-07T08:19:32.243 回答