我已經旋轉了2個小時了,所以我想在這裏發佈一些建議。Autorelease造成應用程序崩潰
以我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];
在[自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;
事實上,我正在autoreleasing containerView導致我的應用程序崩潰。我返回一個alloc'd對象,所以我想我必須以某種方式釋放它,autorelease似乎是最好的方法。如果我刪除它,事情工作正常,但我不會有內存泄漏?
感謝
代碼看起來正確。你打開了NSZombieEnabled標誌,看看是否真的如此? –
您發佈的代碼段在內存管理方面是正確的。你如何初始化你添加到containerView的對象?嘗試運行靜態分析器,看看它是否捕獲任何東西。 – titaniumdecoy
使用return [containerView autorelease];並從UIView初始化中刪除autorelease。 –