0
- (NSArray *) makeKeyValueArray: (NSArray *) arr
{
    NSMutableArray *result = [[NSMutableArray alloc] init];
    for(int i = 0; i < [arr count]; i++)
    {
        [result addObject:[[KeyValue alloc] initWithData:[arr objectAtIndex:i] :[arr objectAtIndex:i]]];
    }
    return result;
}

インスツルメンツは上記のコードで188のリークを示していますが、それはなぜですか?誰か私に説明してもらえますか?

4

1 に答える 1

5
- (NSArray *) makeKeyValueArray: (NSArray *) arr
{
    NSMutableArray *result = [[NSMutableArray alloc] init];
    for(int i = 0; i < [arr count]; i++)
    {
        id obj = [[KeyValue alloc] initWithData:[arr objectAtIndex:i] :[arr objectAtIndex:i]]; // obj reference count is now 1, you are the owner
        [result addObject:obj]; //reference count is now 2, the array is also an owner as well as you.
        [obj release];// reference count is now 1, you are not the owner anymore
    }
    return [result autorelease];
}  

基本的なメモリ管理ルールを見てください

所有するオブジェクトの所有権を放棄する必要があります

于 2012-12-11T05:53:57.123 に答える