【问题标题】:Memory management within a message消息中的内存管理
【发布时间】:2010-08-27 13:12:25
【问题描述】:

排队

[angleLabelInRadians setText:[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]]; 

在消息中创建 NSString 对象时,我还需要释放这个 NSString 吗?如果需要,如果我还没有创建指向该对象的指针,我该怎么做?

此外,这是正确的编码过程,还是这一行太长了?拆分成下面的形式会更好吗?

NSString *polyRad = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]];
[angleLabelInRadians setText:polyRad];
[polyRad release];

【问题讨论】:

    标签: objective-c memory memory-management


    【解决方案1】:

    除非您处于没有自动释放池的环境中,否则您通常只需使用其中一个便利功能即可完成上述操作。

    [angleLabelInRadians setText:[[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]; 
    

    如果您不想使用自动释放,则必须这样做

    NSString *s = [[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]];
    [angleLabelInRadians setText:s];
    [s release];
    

    【讨论】:

      【解决方案2】:

      有一个简单的规则:释放您使用“init”或“new”创建的每个对象。在上面的示例中,您可以调用“autorelease”来释放字符串或静态初始化程序,如 [NSString stringWithFormat:...] - 它在内部使用自动释放。

      【讨论】:

        【解决方案3】:

        你有两个选择:

        你建议的那个:分成三个语句。

        我个人认为这样更好。只需查看这些树线,您就可以清楚地了解自己在做什么。目前还不清楚你想在一行中做什么。 (但这是我个人的看法)

        或者你总是可以像 Grobra 所说的那样自动释放字符串。

        使用方便的方法

        [angleLabelInRadians setText:[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]];
        

        或者简单地自动释放字符串

        [angleLabelInRadians setText:[[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]] autorelease]];
        

        【讨论】:

        • init + autorelease 与便捷方法完全相同,所以当有一个类方法时,不确定你为什么要这样做。
        猜你喜欢
        • 1970-01-01
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        相关资源
        最近更新 更多