我已经为此花了两个小时,所以以为我会在这里发布一些建议。

在我的viewDidLoad方法中,我这样做:

UIScrollView * scrollView = [[UIScrollView分配] initWithFrame:CGRectMake(0,0,320,600)];
...
UIView * contactsRow = [self generateContactsRow];
contactRow.frame = CGRectMake(10,tableMaxY,300,56);
...
[scrollView addSubview:contactsRow];
[self.view addSubview:scrollView];
[scrollView版本];

在[self generateContactsRow]中,我基本上创建了一个容器视图,在其中加载了一堆其他视图(按钮,标签等),然后将其返回。

UIView * containerView = [[[[UIView alloc] initWithFrame:CGRectMake(0,0,300,0)]自动释放];
...(定义的东西)
//设置
[containerView addSubview:imageView];
[containerView addSubview:textLabel];
[containerView addSubview:detailTextLabel];
[containerView addSubview:addButton];
[containerView addSubview:hr];

//忘记它
[imageView发布];
[textLabel发布];
[detailTextLabel发布];
[addButton发行];
[hr发布];

返回containerView;

我自动释放containerView的事实导致我的应用崩溃。我返回一个分配对象,所以我认为我必须以某种方式释放它,而自动释放似乎是最好的方法。如果删除它,一切正常,但是会不会发生内存泄漏?

谢谢

最佳答案

使该段如下所示

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的子视图后将其释放。因此不会有任何内存泄漏。

关于iphone - 自动发布会导致应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8178136/

10-13 05:42