我正在尝试修复我的应用中的所有内存泄漏。我对这行代码有一些问题
[appDelegate setPendingConnectionsArray:[[NSArray alloc]initWithArray:[response JSONValue]]];
此处 PendingConnectionsArray 是在 appDelegate 中定义的NSArray。当我使用XCode的分析工具分析我的应用程序时。然后它表示物体可能泄漏但没有进一步的信息。我该如何解决这个泄密问题。
这条线的情况也一样
phone_book_data.contact_image = [UIImage imageWithData:(NSData *)ABPersonCopyImageData(aSource)];
提前致谢。
答案 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]];