我现在已经在这上面旋转了2个小时,所以我想在这里发布一些建议。
在我的viewDidLoad方法中,我这样做:
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; ... UIView *contactsRow = [self generateContactsRow]; contactsRow.frame = CGRectMake(10, tableMaxY, 300, 56); ... [scrollView addSubview:contactsRow]; [self.view addSubview:scrollView]; [scrollView release];
在[self generateContactsRow]中,我基本上创建了一个容器视图,在里面加载了一堆其他视图(按钮,标签等),并将其返回。
UIView *containerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 0)] autorelease]; ... (define stuff) // set it [containerView addSubview:imageView]; [containerView addSubview:textLabel]; [containerView addSubview:detailTextLabel]; [containerView addSubview:addButton]; [containerView addSubview:hr]; // and forget it [imageView release]; [textLabel release]; [detailTextLabel release]; [addButton release]; [hr release]; return containerView;
我自动释放containerView的事实导致我的应用程序崩溃。我返回一个alloc'd对象,所以我认为我必须以某种方式释放它,自动释放似乎是最好的方法。如果我删除它,一切正常,但我不会有内存泄漏吗?
由于
答案 0 :(得分:2)
使细分如下
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 600)];
...
UIView *contactsRow = [[self generateContactsRow] retain];
contactsRow.frame = CGRectMake(10, tableMaxY, 300, 56);
...
[scrollView addSubview:contactsRow];
[self.view addSubview:scrollView];
[contactsRow release];
[scrollView release];
我在此处保留contactsRow
并在将其作为scrollView的子视图后发布。所以不会有任何内存泄漏。
答案 1 :(得分:0)
您可以在viewdidunload或viewwillDisapper方法中释放它......