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与便利方法完全相同,因此不确定在有类方法的情况下为什么要这样做。