сборка и анализ не работают в моем проекте

В моем проекте iPhone, когда я выбираю сборку и анализ (shift + mac + A), это дает мне всю потенциальную утечку памяти в моем проекте... но в моем текущем проекте это не работает... когда я намеренно помещаю утечку памяти и выберите сборку и анализ... это не дает мне никакой потенциальной утечки памяти в результате анализатора

если я напишу

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:6];
NSMutableArray *tempArrayfinal = [[NSMutableArray alloc] initWithCapacity:12];

и не выпускает его ... это не дает мне никакой потенциальной утечки, но если я напишу

NSString *leakyString = [[NSString alloc] initWithString:@"Leaky String "];
NSLog(@"%@",leakyString);

здесь он дает мне потенциальную утечку в качестве результата анализатора... почему он не дает потенциальной утечки в NSMutableArray и почему он дает потенциальную утечку в NSString?... как я могу полагаться на сборку и анализ утечки памяти...

Я запустил приложение с инструментом утечки, и оно показывает мне утечку в tempArray и tempArrayfinal.

Вот моя функция

- (void)viewDidLoad 
{
    [super viewDidLoad];

    maxOnSnaxAppDelegate *delegate = (maxOnSnaxAppDelegate *)[[UIApplication sharedApplication] delegate];
    lblMessage.tag = MESSAGE_LABEL;
    lblGuess.tag = GUESS_LABEL;
    lblScore.tag = SCORE_LABEL;
    self.gameCompleteView.tag = FINAL_SCORE_VIEW;
    lblFinalScore.tag = FINAL_SCORE_LABEL;

    lblGuess.text = @"";
    lblMessage.text = @"";
    lblScore.text = @"";

    int row = 0;
    int column = 0;

    maxImagrArray = [[NSMutableArray alloc] init];

    for(UIView *subview in [self.view subviews]) {

        if([subview isKindOfClass:[CustomImageView class]])
        {
            [subview removeFromSuperview];
        }
    }

    for(int i = 0 ; i < 12 ; i++)
    {
        if(i%3 == 0 && i != 0)
        {
            row++;
            column = -1;
        }
        if(i != 0 )
        {
            column++;
            //row = 0;
        }
        CustomImageView *tempImageView = [[CustomImageView alloc] initWithImage:[UIImage imageNamed:@"max-img.png"]];


        tempImageView.frame = CGRectMake((column*tempImageView.frame.size.width) + 45, (row*tempImageView.frame.size.height)+ 60, tempImageView.frame.size.width, tempImageView.frame.size.height);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextClearRect(context, tempImageView.bounds);
        [self.view addSubview:tempImageView];
        tempImageView.tag = i+1;
        tempImageView.userInteractionEnabled = YES;
        [maxImagrArray addObject:tempImageView];

        [tempImageView setIndex:i]; 

        [tempImageView release];
    }

    NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:6];
    NSMutableArray *tempArrayfinal = [[NSMutableArray alloc] initWithCapacity:12];
    for(int i = 0 ; i < 12 ; i++)
    {
        if(i < 6)
        {
            int temp = (arc4random() % 10) + 1;
            NSString *tempStr = [[NSString alloc] initWithFormat:@"%d",temp];
            [tempArray insertObject:tempStr atIndex:i];
            [tempArrayfinal insertObject:tempStr atIndex:i];
            [tempStr release];

        }
        else
        {
            int temp = (arc4random() % [tempArray count]);
            [tempArrayfinal insertObject: (NSString *)[tempArray objectAtIndex:temp] atIndex:i];
            //int  index = [(NSString *)[tempArray objectAtIndex:temp] intValue];
            [tempArray removeObjectAtIndex:temp];

        }
        CustomImageView *tmpCustom = [maxImagrArray objectAtIndex:i];
        tmpCustom.frontImageIndex = [(NSString *)[tempArrayfinal objectAtIndex:i] intValue];
        NSLog(@"%d",tmpCustom.frontImageIndex);
    }
    [maxImagrArray release];
    delegate.time = 60.0;

    timer = nil; 

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDown) userInfo:nil repeats:YES];
    delegate.view = self.view;

    //[tempArray release];
    //[tempArrayfinal release];//these 2 lines are deliberately commented to see
//...it is not showing any  potential memory leak though....
    delegate.viewController = self;

}

пожалуйста помоги...


person Mihir Mehta    schedule 09.06.2010    source источник
comment
Вы пытались проверить, что это настоящая утечка памяти, с помощью инструмента «Выполнить» -> «Выполнить с инструментами производительности» -> «Утечки»? в большинстве случаев Apple делает все правильно, поэтому, скорее всего, это проблема с вашим кодом.   -  person iwasrobbed    schedule 09.06.2010
comment
да, я проверил с помощью инструментов утечки tempArray и tempArrayfinal на самом деле протекает, но не отображается как потенциальная утечка при сборке и анализе...   -  person Mihir Mehta    schedule 10.06.2010


Ответы (2)


[tempArray insertObject:tempStr atIndex:i];
 [tempArrayfinal insertObject:tempStr atIndex:i];

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

person Mihir Mehta    schedule 15.06.2010

Вы не должны полагаться на инструмент Build and Analyze. Он не всегда улавливает все утечки. Ничто не заменит соблюдение правил управления памятью от Apple (кроме сборки мусора в OS X). Однако я не уверен, почему он не улавливает такую ​​​​простую утечку. Я попробовал строку в методе, и это дало мне результат. Вы уверены, что это не в операторе if, потому что я обнаружил, что иногда в операторе if это не исправит вас.

person Tom H    schedule 10.06.2010
comment
эй, спасибо за ответ .. нет, его нет ни в одном операторе if, он находится в методе viewDidLoad .. он специфичен для массива ...? - person Mihir Mehta; 10.06.2010
comment
Можете ли вы опубликовать весь метод viewDidLoad, чтобы мы могли видеть, потому что я пробовал, и он появился в проверках сборки и анализа. - person Tom H; 10.06.2010
comment
Я не могу понять, почему это может быть. Если вы закомментируете все, кроме двух строк, вы получите результат анализатора? Если это так, попробуйте постепенно комментировать материал, пока не узнаете, что это такое. Тем не менее, вы можете не захотеть беспокоиться, так как с его запуском проблем нет, не так ли? - person Tom H; 11.06.2010
comment
Нет абсолютно никаких проблем с запуском программы... меня просто беспокоит надежность сборки и анализа... я хочу знать точное ограничение сборки и анализа... попробую... спасибо - person Mihir Mehta; 11.06.2010
comment
[tempArray insertObject:tempStr atIndex:i]; [tempArrayfinal insertObject:tempStr atIndex:i]; являются виновниками ... когда я раскомментирую эти 2 строки ... он перестает давать мне предупреждение ... я не знаю, почему ... - person Mihir Mehta; 11.06.2010
comment
Анализатор никогда не был предназначен для обнаружения каждой ошибки управления памятью. Интересно, почему он спотыкается там? - person Tom H; 11.06.2010