潜在的内存泄漏

bos*_*rol 0 iphone memory-leaks memory-management objective-c ios4

我使用Xcode 4在iPhone iOS上开展项目.

使用Xcode>产品>分析我得到35个问题,所有这些类型:

 myTextField.text = [[NSString alloc] initWithFormat:@"0.2f", abc];
Run Code Online (Sandbox Code Playgroud)

问题是"分配给......的对象的潜在泄漏"

什么是有害物体,我该如何释放它?

谢谢

csa*_*ano 5

您正在泄漏您分配给myTextField.text的字符串.发生此分配时,正在制作副本(请查看文档中的属性定义).在大多数情况下,当值是不可变的时(如NSStrings的情况),副本将为您提供一个实例,该实例指向与正在复制的对象相同的位置,并且保留计数加1.

如果您的代码:

myTextField.text = [[NSString alloc] initWithFormat:@"0.2f", abc];
Run Code Online (Sandbox Code Playgroud)

您分配的字符串的保留计数为2.

您将需要(1)释放,(或自动释放)字符串,或(2)使用NSString方便方法之一,例如stringWithFormat:来创建字符串.这将为您提供一个自动释放的字符串,因此您不必担心明确释放它.

(1)

NSString *str = [[NSString alloc] initWithFormat:@"0.2f", abc];
myTextField.text = str;
[str release]
Run Code Online (Sandbox Code Playgroud)

要么

myTextField.text = [[[NSString alloc] initWithFormat:@"0.2f", abc] autorelease];
Run Code Online (Sandbox Code Playgroud)

(2)

myTextField.text = [NSString stringWithFormat:@"0.2f", abc]; // autoreleased
Run Code Online (Sandbox Code Playgroud)