2010-04-01 5 views
0

나는 약 40 문자열을 각각 포함하는 세 개의 배열을 포함하는 plist 파일을 사용하는 종속 선택 도구를 통해 사용자 입력을 기반으로 이미지 (차트)를 선택하는보기 작업 중입니다.메모리 누수가 발생 했습니까? (아이폰 응용 프로그램)

앱을 실행할 때의 약 50 %는 즉시 종료되지만 실행되는 다른 시간에는 피커를 스크롤하면서 시작하여 약 4 초 후에 충돌합니다. 초. 또한 왼쪽 구성 요소에 배열 이름 중 하나를 표시하지 않습니다.

메모리 누수를 검사하기 위해 애널라이저를 사용하여 앱을 실행 해 보았지만 메모리 누수 모드로 애널라이저를 사용하는 경우 전혀 실행되지 않습니다. 코드는 책에서 거의 벗어나 있습니다.

-(void) viewDidLoad { 
     [super viewDidLoad]; 
     UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"US High Index.jpg"]]; 
     self.imageView = tempImageView; 
     NSString *string = @"US High Index"; 
     self.chartNameLabel.text = string; 
     [string release]; 
     [tempImageView release]; 


    scrollView.contentSize = CGSizeMake(imageView.frame.size.width , imageView.frame.size.height); 
    scrollView.maximumZoomScale = 4.0; 
    scrollView.minimumZoomScale = .05; 
    scrollView.clipsToBounds = YES; 
    scrollView.delegate = self; 

    [scrollView addSubview:imageView]; 

    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *plistPath = [bundle pathForResource:@"ChartTypes" ofType:@"plist"]; 

    NSDictionary *dictionary = [[NSDictionary alloc]initWithContentsOfFile:plistPath]; 

    self.chartsDictionary = dictionary; 


    NSArray *components = [self.chartsDictionary allKeys]; 
    self.chartTypes = components; 


    NSString *selectedChartType = [self.chartTypes objectAtIndex:0]; 
    NSArray *array = [chartsDictionary objectForKey:selectedChartType]; 
    self.charts = array; 

    [dictionary release]; 
    [array release]; 

    [selectedChartType release]; 
    [plistPath release]; 
    [bundle release]; 
} 



-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 2; 
} 

    -(NSInteger)pickerView:(UIPickerView *)pickerView 
    numberOfRowsInComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) 
      return [self.chartTypes count]; 

      return [self.charts count]; 

    } 

    #pragma mark Picker delegate methods 
    -(NSString *)pickerView:(UIPickerView *)pickerView 
    titleForRow:(NSInteger)row 
       forComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) 
      return [self.chartTypes objectAtIndex:row]; 

      return [self.charts objectAtIndex:row]; 



    } 

    -(void)pickerView:(UIPickerView *)pickerView 
      didSelectRow: (NSInteger)row 
      inComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) { 
      NSString *selectedChartType = [self.chartTypes objectAtIndex:row]; 
      NSArray *array = [chartsDictionary objectForKey:selectedChartType]; 
      self.charts = array; 
      [picker selectRow: 0 inComponent:kChartComponent animated: YES]; 
      [picker reloadComponent:kChartComponent]; 

     } 
     } 

답변

3

나는 두 객체가 오토 릴리즈되기 때문에 당신이 당신의 viewDidLoad 방법에

[array release]; 
[selectedChartType release]; 

를 호출 할 필요가 없습니다 생각 :

여기에 관련 코드입니다. 아마도 그 사고를 일으킬 수 있습니다.

+0

thx, 그렇게 된 것 같습니다. – Brodie

관련 문제