我在ARC上使用xcode 4.4。我曾經動態創建的ViewController.m UIViews:在如何在ARC之間切換UIViews沒有內存泄漏?
UIView* myviews[10];
然後 - (無效)viewDidLoad中功能我每次填寫它與圖片,我需要
myviews[viewIndex] = [[UIView alloc]initWithFrame:myrec];
UIImage *testImg;
UIImageView * testImgView = [[UIImageView alloc]init];
testImg = [UIImage imageNamed:[NSString stringWithFormat:@"imgarray%d.png", viewIndex];
[testImgView setImage:testImg];
[myviews[viewIndex] addsubView:testImgView];
viewindex++;
所以,一切似乎都很正常,當我想跳,從一個視圖到另一個我這樣做有兩個按鈕旁邊:
[self.view addSubview:views[viewIndex]];
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setDuration:1.0f];
[animation setType:@"rippleEffect"];
[animation setSubtype:kCATransitionFromTop];
//[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[self.view.layer addAnimation:animation forKey:@"transitionViewAnimation"];
似乎沒有什麼是壞的,但內存消耗巨大的速度增長,當我視圖之間切換..然後我得到低內存警告或有時應用程序只會崩潰。
我曾嘗試使用的UIViewController陣列和控制器之間進行切換:沒什麼變化,內存不足警告是什麼我結束了..
也許我需要以某種方式清潔內存?但是如何? ARC不允許使用隔離等..
去年我曾嘗試(對不起,也許不是很專業)之前添加新的子視圖是這個
NSArray *viewsToRemove = [self.view subviews];
for (UIView *views in viewsToRemove) {
[views removeFromSuperview];
}
但是這並沒有幫助。
編輯:我需要澄清一件事:我需要在應用程序執行過程中每個UIView,這意味着我不能在應用程序退出前釋放它。
EDIT2:編輯代碼看起來更像真實的代碼。
我在下面回答,是的代碼只是一個例子,我如何創建圖像的UIViews。你的提示與標籤是一個好主意,但不是在我的情況下,我仍然需要動畫......它似乎不會從數組中選擇我的視圖,但每次我嘗試添加它時創建它。這是我看到的唯一合乎邏輯的答案。但我必須讓它工作。 –
噢和[UIView setAnimationTransition:110 forView:view cache:NO]不適用於iOS 5.1?我剛剛嘗試過,視圖剛好改變,好像根本沒有動畫。 –
對不起,我忘了addSubViews不是動畫。你需要操縱alpha。 – mackworth