参照这个页面控制的例子可能有人请解释代码流?乐器在这里给我泄漏,所以寻找一些帮助。可能在这个例子中解释代码流?内存泄漏?哪里?
回复:本教程: 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