UIButton - alloc initWithFrame: vs. buttonWithType:(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!
-buttonWithType:返回一个自动释放的UIButton对象.
-buttonWithType:returns an autoreleasedUIButtonobject.
+[NSObject alloc]默认标量实例变量为0,所以buttonType应该是0,或 UIButtonTypeCustom.
+[NSObject alloc] defaults scalar instance variables to 0, so buttonType should be 0, or UIButtonTypeCustom.
优点 &缺点
您可能会争辩说,使用
-buttonWithType:并明确设置buttonType会更清晰,并且在 Apple 更改UIButtonTypeCustom是1而不是0(这绝对不会发生).
You could argue that it's clearer to use
-buttonWithType:and setbuttonTypeexplicitly and that it's safer in case Apple changesUIButtonTypeCustomto be1instead of0(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:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:UIButton - alloc initWithFrame: 与 buttonWithType:
基础教程推荐
- 如何将图像从一项活动发送到另一项活动? 2022-01-01
- UIImage 在开始时不适合 UIScrollView 2022-01-01
- SwiftUI-ScrollViewReader的ScrollTo不滚动 2022-01-01
- Xcode UIView.init(frame:) 只能在主线程中使用 2022-01-01
- 如何比较两个 NSDate:哪个是最近的? 2022-01-01
- 为什么姜饼模拟器方向卡在应用程序中? 2022-01-01
- navigationItem.backBarButtonItem 不工作?为什么上一个菜单仍然显示为按钮? 2022-01-01
- Play 商店的设备兼容性问题 2022-01-01
- Android Volley - 如何动画图像加载? 2022-01-01
- iOS - UINavigationController 添加多个正确的项目? 2022-01-01
