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