在ios中释放内存

时间:2011-12-20 08:13:24

标签: iphone ios memory-management uibutton

UIButton *btn = [[UIButton alloc]init];

在上面的代码中,我应该释放btn,因为我知道我已经分配了它们,后来我需要执行     [btn release];某处。

UIButton *btn = [UIButton buttonwithtype:UIButtonTypeRoundrect];

在第二种类型中我应该释放btn还是btn一个自动释放的对象,我不必调用它自己发布?

如何在第二种类型中释放btn?

5 个答案:

答案 0 :(得分:2)

避免考虑对象是否自动释放。实际上,从方便方法返回的许多对象根本不是自动释放的,例如它们可能是静态实例。

相反,只需考虑一下你是否拥有对象。对于名称中包含allocnewcopy的方法,或者您已明确获得retain所有权的对象 - 这些意味着您拥有返回的对象,并且您必须放弃release的所有权。对于您不拥有的对象,您不必release

rules内存管理非常简单。让他们记忆,这样的问题的答案将成为第二天性。

答案 1 :(得分:1)

您不需要在第二个示例中释放按钮; [UIButton buttonWithType:]返回一个自动释放的对象。

有一条简单的规则:只有在releaseallocretaincopy时才需要mutableCopy

答案 2 :(得分:0)

在第二种类型中,它返回一个自动释放对象,因此您不必担心释放它。

答案 3 :(得分:0)

第一种情况:

你必须释放它,因为你拥有它。

  • 当你创建一个对象(new或alloc,copy或mutablecopy)时,它有 保留计数为1并且您拥有它。
  • 当您向对象发送保留消息时,其保留计数为 增加1并拥有它。

第二种情况:

您收到的按钮是从便利构造函数中获得的。

“便利构造函数”创建一个发送自动释放消息的对象。

所以你不应该在第二种情况下释放按钮。只有在您发送了保留方法时才可以发送发布消息。

答案 4 :(得分:0)

第二次,你不需要释放按钮,它会自动返回自动释放类型。并且您只需要在拥有对象时释放该对象(例如使用alloc或new或copy)。