2011-03-03 4 views
0

누군가 올바른 방향으로 나를 가리킬 수 있습니까? 이 파일을 펜촉으로로드하고 언로드 한 후 악기를 다시로드하면 메모리 누수가 발생한다고합니다. 구체적으로 말하자면, compareOptions NSMutableArray를 설정하고 어디에서 [vc release]를 호출하는지 말합니다. CompareOptions는 dealloc에서도 릴리스 된 synthesize 속성입니다. 미리 감사드립니다.배열이있는 메모리 누수

- (void)viewDidLoad{ 
[super viewDidLoad]; 

//NSLog(@"Comparison.viewDidLoad"); 

self.compareOptions = [[NSMutableArray alloc] init]; 


self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)]; 

    //NSDictionary * currComparison = (NSDictionary*)[data objectAtIndex:0]; 
    //NSArray   * correctOptions = [currComparison objectForKey:@"correct"]; 

for(int i = 0; i < 3; i++) 
{ 
    UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil]; 

    ComparisonOptions * options = (ComparisonOptions *)vc.view; 

    [options setup]; 
    options.index = i; 

    //options.frame = CGRectMake(355 + (306 * i), 475, options.frame.size.width, options.frame.size.height); 

    //[options setCorrect:[correctOptions objectAtIndex:i]]; 

    [vc release]; 

    [self.view addSubview:options]; 

    [self.compareOptions addObject:options]; 
} 

[self.view addSubview:self.tabs]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabSelectedHandler:) name:@"tabSelected" object:nil ]; 

[self update:0];} 

답변

3

compareOptions 및 탭의 속성은 어떻게됩니까? 그것은 당신의 물건을 유지합니까?

유지하면 setter 및 alloc을 사용하면 두 번 유지됩니다.

self.compareOptions = [[NSMutableArray alloc] init]; 
    ^retains       ^^^^^ retains 

self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)]; 
    ^retains    ^^^^^ retains 

당신은 해제 될 것 같은 시간 VC에서 해제됩니다이 대신

self.compareOptions = [NSMutableArray array]; 
self.tabs = [[[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)] autorelease]; 

UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil]; 
ComparisonOptions * options = (ComparisonOptions *)vc.view; 

[vc release]; 

[self.view addSubview:options]; 

vc.view (즉 옵션)를 사용할 수 있습니다. 그리고 이것은 [vc release]를 호출 할 때 발생합니다. 이 후에는 옵션을 사용할 수 없습니다.

뷰를 하위보기에 추가 한 후에는 vc를 릴리스해야합니다.


그리고 더 나은 클래스 이름에 대해 생각해야합니다. 나는 ComparisonOptions가 View라고 가정하지 않습니다. 그것은 NSCaseInsensitiveSearch 등과 같이 소리가납니다. 옵션 일 것입니다.