2009-12-22 72 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开头的内容。

为避免泄漏,方法的调用者必须在可能时释放对象。