UIButton - alloc initWithFrame: 与 buttonWithType: [英] UIButton - alloc initWithFrame: vs. buttonWithType:

查看:19
本文介绍了UIButton - alloc initWithFrame: 与 buttonWithType:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定(任意):

CGRect frame = CGRectMake(0.0f, 0.0f, 100.0f, 30.0f);

以下两个代码片段有什么区别?

What's the difference between the following two code snippets?

1.

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = frame;

2.

    UIButton *button = [[[UIButton alloc] initWithFrame:frame] autorelease];

推荐答案

我认为它们是等价的.哈哈!诡计问题你这个鬼鬼祟祟的小混混!

I think they're equivalent. Haha! Trick question you sneaky little punk!

  1. -buttonWithType: 返回一个自动释放的 UIButton 对象.

  1. -buttonWithType: returns an autoreleased UIButton object.

+[NSObject alloc]默认标量实例变量为0,所以buttonType应该是0,或 UIButtonTypeCustom.

+[NSObject alloc] defaults scalar instance variables to 0, so buttonType should be 0, or UIButtonTypeCustom.

优点 &缺点

  1. 您可能会争辩说,使用 -buttonWithType: 并明确设置 buttonType 会更清晰,并且在 Apple 更改 UIButtonTypeCustom1 而不是 0 (这绝对不会发生).

  1. You could argue that it's clearer to use -buttonWithType: and set buttonType explicitly and that it's safer in case Apple changes UIButtonTypeCustom to be 1 instead of 0 (which will most certainly never happen).

另一方面,你也可以争辩说它很清楚 &使用 -initWithFrame 足够安全.此外,还有许多 Xcode 示例项目,例如TheElements"和BubbleLevel"使用这种方法.一个优点是您可以在应用程序主线程的运行循环耗尽其自动释放池之前显式释放 UIButton.而且,这就是为什么我更喜欢选项 2.

On the other hand, you could also argue that it's clear & safe enough to use -initWithFrame. Plus, many of the Xcode sample projects, such as "TheElements" & "BubbleLevel," use this approach. One advantage is that you can explicitly release the UIButton before the run loop for your application's main thread has drained its autorelease pool. And, that's why I prefer option 2.

这篇关于UIButton - alloc initWithFrame: 与 buttonWithType:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆