Objective-C學習筆記 UIView內(nèi)存釋放問題
Objective-C學習筆記 UIView內(nèi)存釋放問題是本文要介紹的內(nèi)容,UIView內(nèi)存釋放,之前一直以為把alloc的UIView對象,最后release掉或者removeFromSuperview掉就可以了。但是最近項目中出現(xiàn)了當釋放父試圖時,子視圖的內(nèi)存不釋放,最后導致內(nèi)存泄漏,報內(nèi)存警告最后程序崩潰。
造成UIview內(nèi)存泄漏的原因是,當釋放UIView時,其子視圖中有占有的資源沒有釋放掉,如動畫沒有結束,最后造成內(nèi)存不會釋放掉。
下面的代碼能夠很好的展示上述過程:
在主視圖上添加一個AnimationView,然后在AnimationView中在添加一個視圖:
- Animations *animationView=[[Animations alloc] initWithFrame:CGRectMake(10, 10, 270, 400)];
 - [animationView setBackgroundColor:[UIColor yellowColor]];
 - [self addSubview:animationView];
 - [animationView release];
 
在Animations視圖中添加一個遞歸的動畫:
- - (void)wobble {
 - NSLog(@">>>>>>>>>>>>>>>>>>");
 - CGFloat rotation = (kWobbleRadians * M_PI * 2) / 360.0;
 - CGAffineTransform wobbleLeft = CGAffineTransformMakeRotation(rotation);
 - [UIView beginAnimations:nil context:nil];
 - [UIView setAnimationDuration:kWobbleTime];
 - [UIView setAnimationDelegate:self];
 - self.transform = wobbleLeft;
 - // if (!releaseFlage) {
 - [UIView setAnimationDidStopSelector:@selector(wobble)];
 - // }
 - [UIView setAnimationRepeatAutoreverses:NO];
 - [UIView commitAnimations];
 - }
 
由于當前類每隔3秒鐘要執(zhí)行一次遞歸,所以當在主視圖中移除AnimationView時,由于AnimationView的子視圖動畫是一個遞歸沒有結束,所以當前這個視圖樹不會釋放,只是不再界面上顯示,最終造成內(nèi)存泄漏。解決辦法如下,當AnimationView想要移除時,需要將其子視圖上的動畫移除掉。我的做法是在AnimationView中添加下面方法即可:
- - (void)willRemoveSubview:(UIView *)subview
 - {
 - Animations *downBookView=(Animations *)subview;
 - downBookView.releaseFlage=TRUE;
 - }
 
這樣內(nèi)存其視圖樹就會跟著釋放掉內(nèi)存,從系統(tǒng)中徹底釋放掉了。
小結:Objective-C學習筆記 UIView內(nèi)存釋放問題的內(nèi)容介紹完了,希望本文對你有所幫助。















 
 
 
 
 
 
 