UIButton只有一个初始化程序buttonWithType
。但这是一个工厂方法,将创建一个自动释放的对象。当然,我们可以做类似的事情:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 50, 30)];
但在这种情况下,我将无法设置按钮的类型,因为buttonType
是一个只读属性。
那么有什么方法可以创建没有自动释放的按钮并且仍然设置它们的类型?
P上。 S.:
将AutoreleasePool与自动释放的对象一起使用是一种很好的做法。但我真的没有自动释放对象的问题。这只是一个疑问。
我不是在寻找任何特定场景的解决方案,所以请不要回答“为什么要这样?”之类的问题。我刚刚想到这是我无法做到的事情......所以我在问......
谢谢, Swapnil
答案 0 :(得分:2)
如果您仍然需要,可以使用初始化程序并稍后向对象发送retain
消息。
我认为缺少其他初始化程序的原因是UIButtons通常在某处添加为子视图,因此会自动收到retain
消息。
答案 1 :(得分:2)
不,只有+buttonWithType:
可以创建这些特殊按钮。没有+alloc
/ -init
对来构造此类按钮的原因是因为它们实际上是由some private subclass实现的(例如UIRoundedRectButton)。
如果您需要保留按钮,请使用-retain
。
theButton = [[UIButton buttonWithType:foo] retain];