没有进一步信息的物体的潜在泄漏

时间:2013-05-28 08:29:29

标签: iphone memory-management memory-leaks

我正在尝试修复我的应用中的所有内存泄漏。我对这行代码有一些问题

[appDelegate setPendingConnectionsArray:[[NSArray alloc]initWithArray:[response JSONValue]]];

此处 PendingConnectionsArray 是在 appDelegate 中定义的NSArray。当我使用XCode的分析工具分析我的应用程序时。然后它表示物体可能泄漏但没有进一步的信息。我该如何解决这个泄密问题。

这条线的情况也一样

phone_book_data.contact_image = [UIImage imageWithData:(NSData *)ABPersonCopyImageData(aSource)];

提前致谢。

3 个答案:

答案 0 :(得分:0)

您需要在 appDelegate

的dealloc中发布 PendingConnectionsArray

答案 1 :(得分:0)

你必须释放数组,因为你已经分配了它。

[appDelegate setPendingConnectionsArray:[[NSArray alloc]initWithArray:[response JSONValue]]autorelease];

答案 2 :(得分:0)

在您之前的例子中,我必须假设您没有使用ARC。在这种情况下,您可以使用以下方法解决此问题:

NSArray *array = [[NSArray alloc] initWithArray:[response JSONValue]];
[appDelegate setPendingConnectionsArray:array];
[array release];

或者用:

[appDelegate setPendingConnectionsArray:[[[NSArray alloc]initWithArray:[response JSONValue]] autorelease]];

或者(如果JSONValue数组是不可变的):

[appDelegate setPendingConnectionsArray:[response JSONValue]];

在后一个示例中,如果是ARC,您只需转移所有权,然后将其清理:

phone_book_data.contact_image = [UIImage imageWithData:(NSData *)CFBridgingRelease(ABPersonCopyImageData(aSource))];

但是在MRC中,你可能会这样做:

CFDataRef dataRef = ABPersonCopyImageData(aSource);
phone_book_data.contact_image = [UIImage imageWithData:(NSData *)(dataRef)];
CFRelease(dataRef);

phone_book_data.contact_image = [UIImage imageWithData:[(NSData *)ABPersonCopyImageData(aSource) autorelease]];