首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone内存管理

iPhone内存管理
EN

Stack Overflow用户
提问于 2011-01-18 17:54:27
回答 2查看 84关注 0票数 0

我需要在这里调用release吗?

我正在将视图加载到didSelectRowAtIndexPath的tableview中...

代码语言:javascript
复制
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文件。当我从第三名回到第二名再到第一名时,我的应用程序崩溃了...我想这是因为发布了我的第一个视图控制器。

EN

回答 2

Stack Overflow用户

发布于 2011-01-18 18:05:18

苹果的memory management rules非常简单:每次调用alloc/new/copy*/retain时,都必须调用auto-/release。调用前者的任何东西(对象或代码块)都拥有所有权;当所有者不再需要拥有的对象时,释放它。例如,self.navigationController将保留一个推入的视图控制器(断言所有权),直到控制器从导航控制器的堆栈中弹出。唯一简单的事情(-istic?)解释遗漏了什么时候使用weak references (为了防止retain cycles是必要的)。

因为eventDetailedViewController是一个局部变量,所以它是拥有eventDetailedViewController的代码块。因为变量不是静态的,所以当块退出时,变量会被丢弃,之后块就不能使用对象了,所以需要释放对象。

票数 2
EN

Stack Overflow用户

发布于 2011-01-18 18:02:58

由于您不打算使用eventDetailedViewController (将其设置为nil),因此您应该将其释放。UINavigationController的pushViewController方法将保留该对象,因此在navigationController不再需要它之前,它不会被释放。

我相信,只有当它是一个非原子的属性时,将它设置为nil才有用,将它设置为nil将释放之前的值。因为它是一个局部变量,所以你应该释放它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4722654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档