2009-12-22 133 views
0

我的代碼是這樣的iphone:功能之間傳遞對象

- (id)getViewControllerForManagedObject:(QIManagedObject *)object { 

DataTableViewControllerReports *nextControllerReports = [[[DataTableViewControllerReports alloc] initWithNibName:@"ReportsScreenXIB" bundle:nil] autorelease]; 

nextControllerReports.objectStack = [self.objectStack arrayByAddingObject:object]; 
return nextControllerReports;} 

我返回自動釋放對象的父類中定義的功能。但在這一點上,應用程序崩潰。我以調試模式運行應用程序,發現從這個函數返回後顯示「Objc_Msgsend」。意味着nextcontrollerReports對象正在發佈。所以任何人都可以幫助我將這個對象傳遞給其他函數。

在此先感謝。

回答

1

添加保留返回的對象調用此函數後立即看..

+0

謝謝,我這樣做,然後它工作正常。但我認爲這種方式的對象會泄漏,你說什麼? – 2009-12-22 11:14:51

+0

而不是直接保留,將其分配給一個屬性定義爲(nonatamic,保留),並添加一個調用來釋放此屬性成員在你的類'dealloc – cidered 2009-12-22 16:43:26

+0

是的。你可以像cidered說的說..當你拿着一個對象使用保留..你必須稍後釋放它.. 或將其設置爲一個屬性(與保留屬性)的東西.. – 2009-12-23 11:10:18

0

你不應該設置nextControllerReports自動釋放,因爲它會盡快,因爲它可以導致運行時內存RELASE。

然後你會得到一個警告,因爲這個方法的調用者將保留返回對象的內存分配,這是你的方法的名字不能理解的。 要刪除它,您應該將該方法重命名爲以copy | alloc | init開頭的內容。

爲避免泄漏,方法的調用者必須在可能時釋放對象。