1

У меня есть кусок кода & Я хочу понять возможность утечки памяти в этом. Я просмотрел документацию Apple here!Утечка памяти в нижнем простом коде

Здесь обрабатывается массив из параметра &, который хранит словарь во временном массиве.

+ (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 может создать утечку памяти. Я хочу понять, почему & в каком сценарии? Может ли кто-нибудь помочь мне в понимании этого?

спасибо, что посмотрели & понимание мой проблема.

+0

вы объявляете массив следующим образом: NSMutableArray * returnArray = [NSMutableArray array]; – karthika

+3

Включен ли ARC в ваш проект? Показывает ли статический анализатор какие-либо предупреждения? У прибора утечки есть какие-либо утечки? –

+0

Да, анализатор профилей отображается для строки NSMutableArray * returnArray = [[NSMutableArray alloc] init]; «Метод возвращает объект Objective-C с сохранением числа +1» и [SharedApp sharedUserData] .linkedProfiles = returnArray; Объект просочился: объект, выделенный и сохраненный в 'returnArray', не упоминается позже в этом пути выполнения и имеет значение сохранения +1 –

ответ

3

Чтобы очистить вещи:

Ваша линия

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

дает право собственности на этот массив. Вы несете ответственность за его выпуск, когда закончите с этим.

Поэтому добавление

[returnArray release]; 

как последняя линия будет работать. Вы можете использовать autorelease вместо этого, или даже работать с autoreleased массив с самого начала, то есть

NSMutableArray *returnArray = [NSMutableArray array]; 

linkedProfiles должна быть сильной ссылки (т.е. strong или copy).

Хотя я настоятельно рекомендую переключиться на ARC, понимание базового управления памятью может пригодиться.

Смежные вопросы