2012-03-01 3 views
0

나는 이것을 알아 내기 위해 지금 며칠 동안 노력했다. 그러나 나는 그것에 대해 잘못된 길을 가고 있거나 매우 간단한 것을 놓치고 있다고 생각한다.IOS 추가 및 하위보기 메모리 누수 제거

스 와이프 동작을 수행하는 단일보기가 있습니다. 스 와이프시 nib 파일에서 하위보기를 만들려고 시도합니다. 하위 뷰를로드하고 하위 뷰를 제거 할 수 있지만 뷰를 할당하거나 제거하는 것과 관련하여 메모리 누수가있을 수 있습니다. 난 내 두 번째보기를 합성하고 현재보기하는 .m 파일에서 첫 번째 뷰의 .H 파일에

나는 또한이 : @class settingsviewcontroller

settingsviewcontroller * settingsview

다음 @ 속성 nonatomic 설정보기에 대한 보유

아래 코드에서 나는 하위보기를 할당합니다. [settingsview 릴리스 [하지만 그 나쁜 메모리 오류가있는 함께 작동하지 않고 작동합니다.

코드의 두 번째 부분에서는 settingsviewcontroller에서 뷰를 제거하는 함수입니다. 그것은 사용자로부터 행동을 취해 화면 밖에서 화면을 움직이게하고, 그것을 제거하려고 시도합니다. 아니면 최소한 시도를 시도합니다.

- (IBAction)swiping:(id)sender { 
    //SettingsViewController *SettingsView = [[SettingsViewController alloc] init]; 

    settingsView = [[SettingsViewController alloc] init]; 

    CATransition *animation = [CATransition animation]; 
    [animation setDuration:0.5f]; 
    [animation setType:kCATransitionPush]; 
    [animation setSubtype:kCATransitionFromTop]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

    [self.view addSubview:[settingsView view]]; 
    [[self.view layer] addAnimation:animation forKey:@"SwitchToView1"]; 

    [settingsView release]; 
} 



- (IBAction)rollOut:(id)sender { 
    UIView *currentView = self.view; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDidStopSelector:@selector(removeFromSuperview)]; 
    //[UIView setAnimationDidStopSelector:@selector(release)]; 
    [UIView setAnimationDuration:0.5f]; 
    currentView.transform = CGAffineTransformMakeTranslation(currentView.frame.origin.x, 480); 
    [UIView commitAnimations]; 
} 

나에게이 몇 가지 방향을 제시하시기 바랍니다, 난 그냥 올바른 방향으로 날 가리 경우 작업을 수행하는 방법을 이해할 수있다.

답변

4

[self.view addSubview : [settingsView view]];

이 코드는 settingsView를 유지하지 않지만 "settingsview의보기"이므로 [settingsView release]를 호출하면이 코드가 유지됩니다. 당신이 어딘가에 settingsView를 호출하면 settingsView가 릴리스되었습니다, 당신은 나쁜 메모리 오류가 발생합니다.

"@property nonatomic retain the settingsview"이므로 [settingsView release]를 대체 할 수 있습니다. 의해 self.settingsView = nil;

+0

나는 self.settingsView = nil을 설정하면서 제안한 것을했다. 보기가 팝업되면, 아무 것도 클릭하자마자 충돌과 잘못된 메모리가 다시 나타납니다. 보기가 표시 될 때 메모리가 할당 해제 된 것처럼 보이므로 화면에있을 때 메모리가 실제로 존재하지 않습니다. – user1232840

+0

[UIView setAnimationDidStopSelector : @selector (removeFromSuperview)]; 처럼 [UIView setAnimationDelegate : self.view]와 같이 self/view를 설정해야합니다. – carl

+0

감사합니다. 실제로 1 분 전에 글을 써서 해결했습니다. [UIView setAnimationDelegate : self]; [UIView setAnimationDidStopSelector : @selector (animationDone)]; 그리고 나서 을 가짐 [self.view removeFromSuperview]; animationDone 함수에서 하지만 조금 더 짧을 것이므로 나중에 조금씩 시도해 보겠습니다. – user1232840