Leg*_*10n 4 iphone memory-management exception objective-c
我正在开发一个iPhone应用程序,我正试图将视图推入导航控制器,我之前做了很多次,但是,我对这个特定的应用程序有一些问题.我有一个表视图,当用户选择一行时,新视图被推入控制器:
DataWrapper *row=[[self.rows objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];
DataViewController *nextController=[[DataViewController alloc] initWithNibName:@"Data" bundle:[NSBundle mainBundle]];
[nextController setInfo:row];
[nextController setRow:[indexPath row]];
[nextController setParent:self];
[self.navigationController pushViewController:nextController animated:YES];
[nextController release];
Run Code Online (Sandbox Code Playgroud)
它很顺利,直到用户点击后退按钮,我得到一个例外,并使用NSZombieEnabled得到这个:
-[DataViewController respondsToSelector:]: message sent to deallocated instance 0x4637a00
Run Code Online (Sandbox Code Playgroud)
所以我试图删除[nextController release],事实上它工作,但为什么???? 我分配了nextController,所以我应该发布它,对吧?如果有类似这样的东西,我觉得发布这个应用程序是不对的,我觉得它会失败.请让我知道你的想法.
您nextController未被导航控制器保留.如果您释放它然后因为只有一init/release对,则释放该对象.稍后当navigationController尝试向其发送消息时,您会收到错误.
这也是删除[nextController release]修复问题的原因.
你是对的,如果你分配了,你应该释放它.但是,只有在您的应用程序完成之后才会发出警告,而不是之前.
有些对象将在应用程序的生命周期内保持分配状态,所以不要觉得太糟糕.
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |