iphone NSString直接使用导致内存泄漏?

时间:2010-09-28 12:44:35

标签: iphone memory nsstring

对于NSString,我们可以使用

  1. NSString * str = [[NSString alloc] initWithString:@“hi”]

  2. NSString * str = [NSString stringWithString:@“hi”];

  3. NSString * str = @“hi”;

  4. 有人请以第3点的形式告诉我,是否拥有@“hi”?我是说清理时是否需要[str release]?

    由于

    第1点,是的,我需要;对于第2点,不,我不

    对于第3点?

2 个答案:

答案 0 :(得分:3)

不,你不需要发布它。

字符串文字(这是案例3中的内容)是在编译时创建的,它们的生命周期是应用程序的生命周期。您还可以轻松检查释放/保留操作是否不影响其保留计数(尝试使用NSLog retainCount属性,您将看到)

答案 1 :(得分:2)

了解每个案例并应用标准内存管理规则:

  1. 您使用了+alloc方法,因此您拥有此对象。您必须释放或自动发布它。
  2. 您没有使用+alloc+new-copy方法。您没有此对象,因此您的代码不应该释放它。
  3. 与2相同 - 你没有分配或复制这个对象,你没有拥有它,你不应该发布它。
  4. 请注意,不是将字符串文字视为魔术对象,如果您以与任何其他对象完全相同的方式对待它们并且应用与所有权和内存管理完全相同的规则,那么您的代码将起作用。