2011-02-10 3 views
0

, когда я строю и анализируем мое заявление, я получаю потенциальную утечку рядом с кодом [array1 release] ... почему его там происходит? .. заранее спасибопотенциальные проблемы утечки

- (void) touchOnFeaturedCatalog 
{ 
    searchId == 2; 
    //featuredCatalogName = @"23064_Leeds2010"; 

    //NSString *response = [ZoomCatalogAppDelegate getResponseFromServer:[NSString stringWithFormat:@"http://www.zoomcatalog.com/iphone/iphone.php?catalog=%@&iphone=Yes&pdf=No", featuredCatalogName]]; 

    NSString *response = [ZoomCatalogAppDelegate getResponseFromServer:@"http://www.zoomcatalog.com/iphone/supplier.php"]; 
    //NSString *response = [ZoomCatalogAppDelegate getResponseFromServer:@"http://test.atvescape.com/articles.php"]; 
    //NSLog(@"Response = %@", response); 
    NSArray *array = [response componentsSeparatedByString:@"##"]; 
    [array retain]; 

    for(int i = 0; i < array.count; i++) 
    { 
     NSLog(@"Trying outer loop.... %d, %@, %@", i, [array objectAtIndex:i], featuredCatalogName); 
     NSArray *array4 = [featuredCatalogName componentsSeparatedByString:[array objectAtIndex:i]]; 
     if(array4.count > 1) 
     { 
      response = [ZoomCatalogAppDelegate getResponseFromServer:[NSString stringWithFormat:@"http://www.zoomcatalog.com/iphone/catalog_search.php?tid2=%@&iphone=yes", [array objectAtIndex:i]]]; 
      NSArray *array3= [response componentsSeparatedByString:@"<br>"]; 
      //baseURL = [NSString stringWithFormat:@"%@", [array3 objectAtIndex:0]]; 




      global_ContentString = [NSString stringWithFormat:@"%@", [array3 objectAtIndex:2]];//(searchId == 1 ? [array objectAtIndex:2] : ([array objectAtIndex: isLineNameSearch ? 2 : 1]))]; 
      [global_ContentString retain]; 

     // NSLog(@"baseURL = %@", global_ContentString); 
      NSArray *array1 = [global_ContentString componentsSeparatedByString:@"@@#"]; 

      for(int j = 0; j < array1.count; j++) 
      { 
       NSArray *array2 = [[array1 objectAtIndex:j] componentsSeparatedByString:@"##"];   
       NSString *str = [NSString stringWithFormat:@"%@", [array2 objectAtIndex:0]]; 
       str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
       if ([str caseInsensitiveCompare:featuredCatalogName] == NSOrderedSame) 
       { 

        global_ContentString = [ZoomCatalogAppDelegate getResponseFromServer:[NSString stringWithFormat:@"http://www.zoomcatalog.com/iphone/iphone.php?catalog=%@&iphone=Yes&pdf=No", [array2 objectAtIndex:5]]]; 
        baseURL = [NSString stringWithFormat:@"%@", [[global_ContentString componentsSeparatedByString:@"<br>"] objectAtIndex:0]]; 
        //global_ContentString = [NSString stringWithFormat:@"%@", [[global_ContentString componentsSeparatedByString:@"<br>"] objectAtIndex:1]]; 
        [global_ContentString retain]; 

        [global_MainPageController presentModalViewController:global_FullPageController animated:YES]; 
        //NSLog(@"$$$$$$$$$$$$$$$$$$$$$$ Catalog id = %@ $$$$$$$$$$$$$$$$$$$$$$$$$$", [array2 objectAtIndex:5]); 
        //[array1 release];memory leak 
        return; 
       } 
      // NSLog(@"Trying inner loop.... %d, %@, %@", j, str, featuredCatalogName); 

      } 


     } 

    // if([[array objectAtIndex:i] com 
    } 
    [array release]; 
    return; 
} 

извините за все ..

+0

вставьте полный код (без пропущенных скобок), а также отформатируйте его. – Eimantas

+0

вы можете вставить снимок экрана результата 'build and analysis' – Robin

+0

, где заканчивается цикл' for' и условие завершения? – Eimantas

ответ

1

Если вы используете только локальный объект (в рамках метода, в котором он создан), вы можете его автообновить. Объекты, которые создаются или возвращаются с помощью удобных методов, доступных до конца вызова функции. Если вам не нужны объекты в другом месте, я предлагаю отложить вызовы retain. Эмпирическое правило состоит в том, что всякий раз, когда вы вызываете alloc, new, retain, или copy, вы туман отпускаете объект. Однако, если вы используете метод удобства, возвращаемый объект является автогенератором для вас.

Кажется, что вы вызываете [global_ContentString retain];, но затем не вызываете соответствующий выпуск.

+0

'[array сохранить];' before for-loop и '[release массива];' не нужно, либо – petershine

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