我需要在这里调用release吗?
我正在将视图加载到didSelectRowAtIndexPath的tableview中...
EventDetailedViewController *eventDetailedViewController=[[EventDetailedViewController alloc]initWithNibName:@"EventDetailedViewController" bundle:nil];
eventDetailedViewController.aEventInfo=aEventInfo;
[self.navigationController pushViewController:eventDetailedViewController animated:YES];
// [eventDetailedViewController release];
eventDetailedViewController=nil;当我需要调用[eventDetailedViewController release];和不需要调用[eventDetailedViewController release]时。表视图中的didSelectRowAtIndexPath ...
编辑:
当我选择它时,我有三个视图,它加载第一个nib。从第一个开始加载第二个nib文件。从第二个开始加载第三个nib文件。当我从第三名回到第二名再到第一名时,我的应用程序崩溃了...我想这是因为发布了我的第一个视图控制器。
发布于 2011-01-18 18:05:18
苹果的memory management rules非常简单:每次调用alloc/new/copy*/retain时,都必须调用auto-/release。调用前者的任何东西(对象或代码块)都拥有所有权;当所有者不再需要拥有的对象时,释放它。例如,self.navigationController将保留一个推入的视图控制器(断言所有权),直到控制器从导航控制器的堆栈中弹出。唯一简单的事情(-istic?)解释遗漏了什么时候使用weak references (为了防止retain cycles是必要的)。
因为eventDetailedViewController是一个局部变量,所以它是拥有eventDetailedViewController的代码块。因为变量不是静态的,所以当块退出时,变量会被丢弃,之后块就不能使用对象了,所以需要释放对象。
发布于 2011-01-18 18:02:58
由于您不打算使用eventDetailedViewController (将其设置为nil),因此您应该将其释放。UINavigationController的pushViewController方法将保留该对象,因此在navigationController不再需要它之前,它不会被释放。
我相信,只有当它是一个非原子的属性时,将它设置为nil才有用,将它设置为nil将释放之前的值。因为它是一个局部变量,所以你应该释放它。
https://stackoverflow.com/questions/4722654
复制相似问题