共同点:这两个宏在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