나는 이것을 알아 내기 위해 지금 며칠 동안 노력했다. 그러나 나는 그것에 대해 잘못된 길을 가고 있거나 매우 간단한 것을 놓치고 있다고 생각한다.IOS 추가 및 하위보기 메모리 누수 제거
스 와이프 동작을 수행하는 단일보기가 있습니다. 스 와이프시 nib 파일에서 하위보기를 만들려고 시도합니다. 하위 뷰를로드하고 하위 뷰를 제거 할 수 있지만 뷰를 할당하거나 제거하는 것과 관련하여 메모리 누수가있을 수 있습니다. 난 내 두 번째보기를 합성하고 현재보기하는 .m 파일에서 첫 번째 뷰의 .H 파일에
나는 또한이 : @class settingsviewcontrollersettingsviewcontroller * 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];
}
나에게이 몇 가지 방향을 제시하시기 바랍니다, 난 그냥 올바른 방향으로 날 가리 경우 작업을 수행하는 방법을 이해할 수있다.
나는 self.settingsView = nil을 설정하면서 제안한 것을했다. 보기가 팝업되면, 아무 것도 클릭하자마자 충돌과 잘못된 메모리가 다시 나타납니다. 보기가 표시 될 때 메모리가 할당 해제 된 것처럼 보이므로 화면에있을 때 메모리가 실제로 존재하지 않습니다. – user1232840
[UIView setAnimationDidStopSelector : @selector (removeFromSuperview)]; 처럼 [UIView setAnimationDelegate : self.view]와 같이 self/view를 설정해야합니다. – carl
감사합니다. 실제로 1 분 전에 글을 써서 해결했습니다. [UIView setAnimationDelegate : self]; [UIView setAnimationDidStopSelector : @selector (animationDone)]; 그리고 나서 을 가짐 [self.view removeFromSuperview]; animationDone 함수에서 하지만 조금 더 짧을 것이므로 나중에 조금씩 시도해 보겠습니다. – user1232840