NSString变量:应该发布吗?

时间:2010-12-16 04:06:20

标签: iphone iphone-sdk-3.0

当我们创建NSString对象时,是否需要释放它?

当我为我的应用程序运行静态分析器时,我得到以下

NSString *dataStr=[[NSString alloc] initWithData:receivedData encoding:NSASCIIStringEncoding];    
Method returns an Objective-C object with a +1 retain count (owning reference)

4 个答案:

答案 0 :(得分:3)

神奇的单词是alloccopyretain:如果在创建对象或声明属性时使用了其中任何一个,则需要{{1}它。

答案 1 :(得分:3)

静态分析器说这是因为你的方法名称并不意味着方法的调用者拥有你要返回的对象的所有权。有几个解决方案:

  1. 修改方法的名称,使其隐含所返回对象的所有权,即这些名称意味着所有权,因为它们以“new”开头或包含“copy”一词:

    • - (NSString *) newDataString
    • - (NSString *) copyDataString

    如果您使用上述方法名称,则意味着该方法的调用者负责在完成对象时发送release消息。

  2. 修改您的方法,以便在使用autorelease方法返回对象之前放弃该对象的所有权:

    - (NSString *) dataString
    {
        NSString *tmp = [[NSString alloc] initWithFormat:@"%f", 2.444];
        return [tmp autorelease];
    }
    

    请注意,每个alloccopyretain 必须releaseautorelease平衡(但不能同时!)。

  3. 阅读Cocoa Memory Management Rules。这些规则不是可选的,您必须遵循它们。规则也很简单。经过一些练习,他们将成为第二天性。

答案 2 :(得分:1)

是的,你需要发布它。通常,每次创建调用alloc的对象指针时,都需要调用release

答案 3 :(得分:1)

是的,你需要发布它。必须释放每个具有保留计数的变量。