Objective c 消息中的内存管理

Objective c 消息中的内存管理,objective-c,memory,memory-management,Objective C,Memory,Memory Management,接电话 [angleLabelInRadians setText:[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]]; 在消息中创建NSString对象时,我是否仍需要释放此NSString?如果需要,我将如何释放,因为我尚未创建指向该对象的指针 此外,这是正确的编码程序,还是这一行太长?按以下形式将其拆分会更好吗 NSString *polyRad = [[NSString alloc] initWithFor

接电话

[angleLabelInRadians setText:[[NSString alloc] initWithFormat:@"%.3g", [poly angleInRadians]]]; 
在消息中创建NSString对象时,我是否仍需要释放此NSString?如果需要,我将如何释放,因为我尚未创建指向该对象的指针

此外,这是正确的编码程序,还是这一行太长?按以下形式将其拆分会更好吗

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

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

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

除非您处于没有autorelease池的环境中,否则您通常只需使用其中一个方便的函数即可完成上述操作

[angleLabelInRadians setText:[[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]; 
如果不想使用自动释放,则必须执行以下操作

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

除非您的环境中没有自动释放池,否则您通常只需使用其中一个方便的函数即可完成上述操作

[angleLabelInRadians setText:[[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]; 
如果不想使用自动释放,则必须执行以下操作

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

您有两个选择:

你建议的那个:分成三份声明

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

或者你也可以像格罗布拉说的那样,自动恢复绳子

使用方便的方法

[angleLabelInRadians setText:[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]];
或者简单地自动释放字符串

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

您有两个选择:

你建议的那个:分成三份声明

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

或者你也可以像格罗布拉说的那样,自动恢复绳子

使用方便的方法

[angleLabelInRadians setText:[NSString stringWithFormat:@"%.3g", [poly angleInRadians]]];
或者简单地自动释放字符串

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

init+autorelease与便利方法完全相同,因此不确定在有类方法的情况下为什么要这样做。init+autorelease与便利方法完全相同,因此不确定在有类方法的情况下为什么要这样做。