OC中的block主要用来保存一段代码,在需要的时候执行。
下面是一个小的例子:
#import "ViewController.h"
@interface ViewController ()
/** myblock(定义一个block) */
@property(nonatomic,copy) void(^myblock)();
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 如果忘记block怎么写,可以使用“inlineblock”。oc会自动提示
// <#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
// <#statements#>
// };
__weak UIViewController *self1 = self;
// __block UIViewController *self1 = self;
/** block代码块 */
self.myblock = ^{
NSLog(@"我被执行了");
self1.view.backgroundColor = [UIColor colorWithRed:arc4random()%10/10.0f green:arc4random()%10/10.0f blue:arc4random()%10/10.0f alpha:1];
};
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSLog(@"%s",__func__);
//执行block
self.myblock();
}
@end
ps:
- 如果忘记block怎么写,可以使用“inlineblock”。oc会自动提示哦!
- 属性要使用copy属性
- 防止循环引用,如果在block块代码中使用,要使用弱类型,用__weak和__block修饰