Потенциальная утечка объекта в объективе c - PullRequest
0 голосов
/ 13 декабря 2011

В моем приложении в методе синтаксического анализа xml найден символьный метод делегата, я использую следующий код

NSString *Str =  [[[NSString alloc] initWithString:foundString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] ;

if ([weekNames containsObject:elementName]) {
  //  if (!settings) {
    //    NSMutableDictionary *dict1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"",@"no",@"بسم الله الرحمن الرحيم",@"surah",nil];

      //  [weekDict insertObject:dict1 atIndex:0];             
    //}
    [array1 addObject:weekDict];
}
if ([elementName isEqualToString:@"DUA"]) {
    [weekDict addObject:duaDict];
}
if ([elementName isEqualToString:@"NO"]) {
    [duaDict setObject:Str forKey:@"no"];   
}
if ([elementName isEqualToString:@"SURAH"]) {
    [duaDict setObject:Str forKey:@"surah"];    
}
foundString=nil;**

Если я использую этот код в приложении для анализа, я получаю сильную утечку памяти.Если я автоматически выпущу Str , это выдаст слишком много раз.Почему так происходит.Пожалуйста, помогите мне.Заранее спасибо

1 Ответ

1 голос
/ 13 декабря 2011

Это:

NSString *Str =  [[[NSString alloc] initWithString:foundString] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]

действительно должно быть:

NSString *Str =  [foundString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

То, что вы сейчас делаете, - это создание (alloc / init) новой строки NSString, а затем ее немедленная утечка, потому что выникогда не сохраняйте указатель.И оказывается, что вам никогда не понадобился этот NSString для начала.

...