使用(或不使用)内存创建UIButton

时间:2010-02-17 15:34:18

标签: iphone interface-builder uibutton

我正在尝试添加带代码的UIButton(而不是Interface Builder)。

有些例子说你必须为按钮分配和释放内存。

其他人使用buttonWithType并神奇地创建一个按钮,而根本不分配任何内存。

这怎么可能?

(两者似乎都很好。)

我想要使用哪两种方法......何时? 1种方法或其他方法是否有一些巨大的好处?

不要告诉我去“阅读文档”。文档是我在这里的原因。他们似乎很少解释事情而不会遗漏大量的“遗漏信息”。

3 个答案:

答案 0 :(得分:10)

buttonWithType: 确实使用内存,但它是autoreleased。这意味着将来某个时候它将是released。因此[UIButton buttonWithType:]相当于[[[UIButton alloc] initWithFrame:] autorelease]

您可以使用任何一种方法,具体取决于您是否要明确或不发布。

答案 1 :(得分:3)

两者都有效。 +buttonWithType:方法是一种方便的方法,类似于

[[[UIButton alloc] initWithType:type] autorelease];

由于它已经-autorelease',因此您无法-release

对于内置按钮(例如圆角矩形,信息按钮等),您必须使用+buttonWithType:,因为没有其他方法可以创建它们。否则,两种选择都没问题。

答案 2 :(得分:0)

Cocoa中有两种内存管理方法:引用计数 autorelease

根据Memory Management Policy in Cocoa

  

您拥有自己创建的任何对象

     

使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法(例如,alloc,newObject或mutableCopy)创建对象。

buttonWithType 没有如上所述的前缀,因此您没有 buttonWithType 创建的按钮。实际上, buttonWithType 使用其他方法 autorelease 来释放创建的按钮。