參照這個頁面控制的例子可能有人請解釋代碼流?樂器在這裏給我泄漏,所以尋找一些幫助。可能在這個例子中解釋代碼流?內存泄漏?哪裏?
回覆:本教程: http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/
我們初始化數組爲NULL我們AppDidFinishLaunching方法的對象......
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
}
self.viewControllers = controllers;
[controllers release];
,然後調用:
[self loadScrollViewWithPage:0];
[self loadScrollViewWithPage:1];
這裏是實施loadScrollViewWithPage:
- (void)loadScrollViewWithPage:(int)page {
if (page < 0) return;
if (page >= kNumberOfPages) return;
PageControlExampleViewControl *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
controller = [[PageControlExampleViewControl alloc] initWithPageNumber:page];
[viewControllers replaceObjectAtIndex:page withObject:controller];
[controller release];
}
if (nil == controller.view.superview) {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.view.frame = frame;
[scrollView addSubview:controller.view];
}
}
儀器是給我一個泄漏以下行此實現:
如果(零== controller.view.superview){
任何人都知道爲什麼,這將是一個報道儀器泄漏?我的代碼是相同的。 也在初始調用後[self loadScrollViewWithPage:0];,第一次通過並創建對象,BOTH如果條款已通過並進入。
這怎麼可能? 如果我們輸入第一個如果條款,我們分配並創建我們的控制器,並通過**釋放*它([控制器發佈])結束。
應該不是下一行(如果(零== controller.view.superview))生產,因爲我們剛剛發佈了上述控制器的EXC_BAD_ACCESS錯誤看見了什麼?
屏幕截圖FROM INSTRUMENTS:
爲受影響的行添加了樂器輸出的屏幕截圖。就像你說的那樣,我真的不知道爲什麼這會漏水。在它正在泄漏的線雖然_controller.view_是**不是**滾動視圖的子視圖呢?它將它添加到它即將進入的子句中? – 2011-03-01 18:38:34
從你的截圖中,它抱怨分配的視圖。報告泄漏的行是分配視圖之前程序中的最後一行。你在某個時候漏了scrollView嗎?這可能會導致Instruments將其所有子視圖計數爲泄漏。 – Anomie 2011-03-01 19:12:15