`
慭慭流觞
  • 浏览: 44172 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

IBOutlet和IBAction的作用

    博客分类:
  • iOS
阅读更多
    If you go into the UIKit_Framework and look at the NSNibDeclarations.h header file, you’ll see that they’re defined like this: macros(宏)
#define IBAction void
#define IBOutlet
#define IBOutletCollection(ClassName)
    Confused? These two keywords do absolutely nothing as far as the compiler is concerned. IBOutlet gets entirely removed from the code before the compiler ever sees it. IBAction resolves to a void return type, which just means that action methods do not return a value. So, what’s going on here?
    The answer is simple, really: IBOutlet and IBAction are not used by the compiler. They are used by Interface Builder. Interface Builder uses these keywords to parse out the outlets and actions available to it. Interface Builder can only see methods that are prefaced with IBAction and can only see variables or properties that are prefaced with IBOutlet. Also, the presence of these keywords tells other programmers, looking at your code in the future, that the variables and methods in question aren’t dealt with entirely in code. They’ll need to delve into the relevant nib file to see how things are hooked up and used.

这两个宏在UIKit_Framework 中定义
IBAction(行为)和IBOutlet(插座)只是告诉InterfaceBuilder这些是用于界面交互的,打开InterfaceBuilder后,首先扫描IBAction和IBOutlet,InterfaceBuilder只识别以IBAction开头的方法和以IBOutlet开头的属性,代码别编译后,IBAction被解析为void,而IBOutlet被解析为空。

http://eyecm.com/iboutlet-and-ibaction-that/

内存管理
如果一个变量在类中被定义为了 IBOutlet 那么你无需对其进行实例化,xib载入器会对其初始化。切记不要初始化两回,内存会溢出,而且对象锁定也会出错。
    如果一个变量在类中被定义为了 IBOutlet 那么你必须负责将其释放。xib载入器不会帮忙的。
需要注意的是,任何一个被声明为IBOutlet并且在Interface Builder里被连接到一个UI组件的成员变量,会被额外retain一次。
常见的情形如: IBOutlet UILabel *label;
             -(IBAction) btnClicked:(id)sender;
这个label在Interface Builder里被连接到一个UILabel。此时,这个label的retainCount为2。
所以,只要使用了IBOutlet变量,一定需要在dealloc或者viewDidUnload里release这个变量
实现m文件中:
-(void) dealloc
{
    [label release];
    [super dealloc];
}

http://blog.joycode.com/ghj/archives/2012/05/22/116258.joy
分享到:
评论

相关推荐

    详解iOS应用使用Storyboard布局时的IBOutlet与IBAction

    在iPhone平台上,引入了IBOutlet与IBAction。通过在变量前增加IBOutlet 来说明该变量将与界面上的某个UI对象对应,在方法前增加IBAction来说明该方法将与界面上的事件对应.  下面通过一个连接网络服务器(Network...

    ios原生二维码扫描

    做iOS的二维码扫描,有两个第三方库可以选择,ZBar和ZXing。今天要介绍的是iOS7.0后...IBOutlet、IBAction如下: @property (weak, nonatomic) IBOutlet UIView *viewPreview; @property (weak, nonatomic) IBOutlet

    Object-c 语法快速入门

    4、IBOutlet、IBAction是啥玩意,总能看到。 这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看 ,NO是0,BOOL本身就是个char。 4、IBOutlet、IBAction是啥玩意,总能看到。 这两...

    dragless-ios:无拖曳的iOS开发

    无拖拽关键点(演示文稿)传统的iOS开发问题@IBOutlet @IBAction链接不编译时间安全笔尖/ XIB / Storyboard合并冲突。 100%的时间不保证安全故事板prepareForSegue loadNib打破了OOP。 Views或ViewController始终...

    05-图片浏览器.zip

    @property (weak, nonatomic) IBOutlet UILabel *indexLabel; // 图像数据 @property (nonatomic, strong) NSArray *imageArray; // 图像控件 @property (weak, nonatomic) IBOutlet UIImageView *imageView; // ...

    02-按钮的基本使用(重构).zip

    @interface ViewController () ...@property (nonatomic, weak) IBOutlet UIButton *head; // 移动 - (IBAction)move:(UIButton *)btn; // 放大 - (IBAction)big; // 缩小 - (IBAction)small; @end

    object c/iphone 开发 试题

    4.#import作用如同#include,用于声明头文件。 5.nil表示空指针,相当于java的null 6.objc中使用字符串,前面要加上"@",是因为在前面加上"符号",编译器在编译的时候会在程序中给你留出位置,这样才能保证这个字符...

    03-QQ登录界面

    @property (weak, nonatomic) IBOutlet UITextField *qqField; @property (weak, nonatomic) IBOutlet UITextField *pwdField; - (IBAction)login; @end @implementation ViewController - (IBAction)login { ...

    dicee-ios-app

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台...

    Dicee-iOS13

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台...

    iOS13-Dice:第二个iOS应用程序并正在计数

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台...

    DiceiOS:我希望这是可行的

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台测试和...

    Dicee

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台...

    Dicee-iOS13:在构建应用程序时学习编码-完整的iOS开发新手训练营

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台测试和...

    骰子

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台测试和...

    Dice:迅捷克隆项目

    使用IBAction和IBOutlet在Interface Builder文件和代码之间创建链接。 熟悉Xcode代码编辑器。 学习使用注释来注释代码。 了解并使用Swift常量和变量。 了解和使用集合类型,例如Swift数组。 使用Xcode控制台测试和...

    Objective-C:iOS原生开发语言Objective-C。从0到1开始的demos

    多余的连线没有删除(创建了多余的IBAction) reason: '[<ViewController> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label1.' 多余的连线没有删除(创建了多余的...

    《iPhone开发实战》.(Christopher Allen).pdf

    14.5.2 使用ibaction200 14.6 其他动作功能201 14.6.1 uitextfield201 14.6.2 uislider203 14.6.3 textfield/slider组合203 14.6.4 创建动作很容易204 14.6.5 使用动作204 14.7 通知简介204 14.8 小结205 ...

    IBAnalyzer:查找常见的xib和情节提要相关的问题,而无需运行您的应用程序或编写单元测试

    查找常见的xib和情节提要相关问题,而无需运行您的应用程序或编写单元测试。 用法 将项目的路径传递到ibanalyzer命令行工具。 这是您可以预期的示例输出: $ ./ibanalyzer ~/code/Sample/ TwitterViewController ...

Global site tag (gtag.js) - Google Analytics