1

我有一段代码,我想了解其中的内存泄漏可能性。我在这里浏览了 Apple 文档!

此处的代码处理来自参数的数组并将字典存储到临时数组中。

+ (void)setLinkedProfiles:(NSArray *)profileData {
    NSMutableArray *returnArray = [[NSMutableArray alloc]init];
    if([profileData count] > 0) {
        for(NSDictionary *dict in profileData) {

            NSDictionary *tempDict = @{
                                   @"verifiedEmail" : ([[dict objectForKey:@"verifiedEmail"] isKindOfClass:[NSNull class]]) ? @"": [dict objectForKey:@"verifiedEmail"],
                                   @"identifier" : [dict objectForKey:@"identifier"],
                                   };
            [returnArray addObject:tempDict];
        }
    }
    [SharedApp sharedUserData].linkedProfiles = returnArray;
}

我怀疑这行代码SharedApp sharedUserData].linkedProfiles = returnArray可能会造成内存泄漏。我想了解为什么以及在哪种情况下?有人可以帮助我理解这一点吗?

感谢您阅读和理解我的问题。

4

1 回答 1

3

清理事情:

你的线路

NSMutableArray *returnArray = [[NSMutableArray alloc]init];

为您提供该数组的所有权。当你完成它时,你有责任释放它。

所以添加

[returnArray release];

因为最后一行会起作用。您可以autorelease改用,甚至从一开始就使用自动释放的数组,即

NSMutableArray *returnArray = [NSMutableArray array];

linkedProfiles应该是强引用(即strong,或copy)。

尽管我强烈建议切换到 ARC,但了解底层内存管理可能会派上用场。

于 2013-09-24T07:28:42.070 回答