什么时候我必须释放在.h文件中声明并在我的.m文件中分配的对象viewdidload?自动释放给我一个错误。我是否必须在iOS:何时释放成员对象?
中发布它们-(void)dealloc{
}
方法(如属性)?
THX
什么时候我必须释放在.h文件中声明并在我的.m文件中分配的对象viewdidload?自动释放给我一个错误。我是否必须在iOS:何时释放成员对象?
中发布它们-(void)dealloc{
}
方法(如属性)?
THX
首先,添加[超级的dealloc],这一点很重要:
-(void)dealloc{
[var1 release], var1 = nil;
[var2 release], var2 = nil;
[super dealloc];
}
其次,是的,你已经保留的实例变量必须由您手动释放。
是[super dealloc] |总是dealloc方法中的最后一个语句?永远不要将它看作第一个.. – user944351 2012-03-15 12:31:00
绝不,永远不要把它放在你的dealloc方法的中间或开始。你的子类变量可能严重依赖于超类变量,所以为了安全起见,子类必须首先被释放。在开始的时候使用简单的子类[super dealloc]可以工作,但我建议你习惯在方法的末尾写下它 - 使代码易于扩展并且看起来更专业。另请注意,如果您省略[super dealloc],应用程序不会崩溃,但会产生内存泄漏。 – 2012-03-15 12:37:28
非常感谢你的努力! – user944351 2012-03-15 12:46:04
如果您使用ARC(在Xcode的最新版本的默认设置),然后保留/释放可自动插入,你只需要担心的对象图(保持引用,当您需要使用一个对象,并避免循环引用)。
如果不是,你是正确的,dealloc
是释放成员变量的正确的地方。尽管专门为在viewDidLoad
中创建的那些,请记住,您的视图可能会在控制器的生命周期内多次加载/卸载,因此请考虑使用viewDidUnload
来释放这些对象。
如果您使用ARC(自动引用计数),你不知道。这是为你自动完成的。如果你不使用ARC,那么你可以像正常一样在dealloc中手动执行它。请注意,新项目将自动使用ARC,如果您尝试使用release
,retain
或autorelease
和对象,ARC会给您一个错误。
不,我不使用弧,因为外部库不支持这个。 – user944351 2012-03-15 12:32:24
是的,你会在一般的释放他们在dealloc
。而且,如果他们在viewDidLoad
正在创建的,那么你可能要释放他们(和伊娃设置为nil
)在viewDidUnload
,特别是如果该对象可以在当前状态下一次viewDidLoad
被称为重建。
当然,如果你使用ARC那么你并不需要显式释放你高德在dealloc
作为ARC会产生dealloc
实现它可以实现这个要求。
我是否总是要释放和无对象? – user944351 2012-03-15 12:38:09
在'viewDidUnload'中,肯定是。在'dealloc'中,这取决于。它不会伤害他们,但你可以在这里读到更多的问题:-)。 – mattjgalloway 2012-03-15 16:04:44
如果你想避免有关内存管理和u需要澄清关于乌尔对象分配和释放他们怀疑内存泄漏的严重问题。试试这个链接http://iosdevelopertips.com/objective-c/memory-management.html
我的事情你是不是obj是否分配内存。 – 2012-03-15 12:23:48
如果你使用alloc,mutableCopy,new,copy来分配内存。然后你释放。 – 2012-03-15 12:26:05