UIButton - alloc initWithFrame: 与 buttonWithType:

UIButton - alloc initWithFrame: vs. buttonWithType:(UIButton - alloc initWithFrame: 与 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!

  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:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Get an event when UIBarButtonItem menu is displayed(显示UIBarButtonItem菜单时获取事件)