我正在尝试添加带代码的UIButton(而不是Interface Builder)。
有些例子说你必须为按钮分配和释放内存。
其他人使用buttonWithType并神奇地创建一个按钮,而根本不分配任何内存。
这怎么可能?
(两者似乎都很好。)
我想要使用哪两种方法......何时? 1种方法或其他方法是否有一些巨大的好处?
请不要告诉我去“阅读文档”。文档是我在这里的原因。他们似乎很少解释事情而不会遗漏大量的“遗漏信息”。
答案 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 来释放创建的按钮。