stringWithFormat创建保留+1实例吗?

我正在申报类型为NSString的伊娃。要初始化这个伊娃的价值,我使用下面的代码:stringWithFormat创建保留+1实例吗?

NSString *myVar; 

-(void)inAnyMethod

{

myVar = [NSString stringWithFormat:@"%@",theValue];

}

我必须发布此伊娃吗?根据我的理解,这不是我的责任。但在大多数情况下,我以这种方式使用的字符串会导致泄漏。

我错过了什么?

回答:

除了奥斯卡戈麦斯回答,请注意,当你使用类方法(带加号的方法,您可以在文档中找到,并且不包括在奥斯卡戈麦斯列表,如stringWithFormat就是其中之一),你不必担心内存管理。如果你创建你自己的类方法,你应该做同样的事情:返回一个autorelease对象。

关于您的代码,如果您只是将您的伊娃分配给NSString对象(从该方法返回),它将无法工作。事实上,在应用程序周期的某个时间点,对象将被释放(它已被放入池中),您的ivar不会再引用任何对象。

诀窍:创建具有copy策略@property或发送copy消息如下所示:当一个类具有可变类型的子类

myVar = [[NSString stringWithFormat:@"%@",theValue] copy]; 

复制被正常使用。否则使用retain。完成后,您拥有该物品的所有权,您必须记得将其释放。如果你不这样做,会导致泄漏。

[myVar release]; 

P.S.由于Xcode 4.2有一个称为ARC的新编译器功能。

希望它有帮助。

回答:

你不需要release它,因为这是一种方便的方法,它返回一个autoreleased对象。

的方式知道如果你正在为1的保留计数的东西,你将需要使用Cocoa命名约定这不能不说什么,用new方法名开始,alloc或含有copy将返回到释放在这种情况下,其他人将返回autoreleased对象。

以上是 stringWithFormat创建保留+1实例吗? 的全部内容, 来源链接: utcz.com/qa/262020.html

回到顶部