IBAction和IBOutlet共同的和区别

共同点:这两个宏在UIKit_Framework中定义。只有给属性设置了IBAction(行为)和IBOutlet(插座),才能够在storyboard里面进行连线。如:

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *lable;
@end

@implementation ViewController

-(IBAction)redClick
{


}

@end

 

不同的:

从返回值的角度:IBAction相当于void

 

从编译角度:IBAction和IBOutlet只是告诉InterfaceBuilder这些是用于界面交互的,打开InterfaceBuilder后,首先扫描IBAction和IBOutlet,InterfaceBuilder只识别以IBAction开头的方法和以IBOutlet开头的属性,代码别编译后,IBAction被解析为void,而IBOutlet被解析为空。

 

从内存角度:

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

原文链接:https://blog.csdn.net/yinyinliushang/java/article/details/84434207

 

 

 

    

 

 

posted @   千面客  阅读(219)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示