Block使用介绍(-)
来源:互联网 发布:大嘴猴天鹅绒知乎 编辑:程序博客网 时间:2024/06/06 03:15
block作为iOS开发的常用技术之一需要深入的了解一下,现在总结一下。不废话直接上代码
Viewcontroller里面的代码:
/** block的使用 * block原型 NSString* (^myBlock)(int); * 原型中声明一个参数为int 返回值为NSString* 的叫myBlock的block(^)原型 * 定义myBlock如下 * myBlock = ^(int num){ * //block body * } * 由于block数据类型的语法会降低整个代码的阅读性,所以常用typedef来定义block类型:例子在 NextViewcontroller里面 */- (void)viewDidLoad { [super viewDidLoad]; //1、定义无参无返回值的Block //返回值类型 blockName 传入参数 block body void (^printBlock) () = ^(){ printf("block \n"); }; printBlock(); printBlock(1); //2、定义一个myBlock的block,参数、返回值为int int mutiplier = 7; int (^myBlock)(int) = ^(int num){ return num * mutiplier; }; NSLog(@"%d",myBlock(3)); printNumBlock(5); //4、__block关键字的使用 当需要改变block body 外部 变量的值时需要在声明前加__Block __block int x = 100; void (^sumAandYBlock)(int) = ^(int y){ x += y; NSLog(@"x + y = %d",x); }; sumAandYBlock(22); [self initSubViews];}//3、定义一个有参数没有返回值的blockvoid (^printNumBlock)(int) = ^(int num){ NSLog(@"pringtNumBlock:%d",num);};/** block注解 * 1、定义的block可以作为函数也可以作为变量 * 2、block可以定义在函数体内也可以在函数体外 * 3、声明block时并不会执行内部的代码,只有调用block时才会执行block体内的代码 * 4、定义在函数体外的block相当于全局变量 */-(void)initSubViews{ label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 100)]; [self.view addSubview:label]; label.center = CGPointMake(kScreenWidth * 0.5, kScreenHeight * 0.5); label.backgroundColor = [UIColor redColor]; next = [[NextViewController alloc]init]; __block ViewController* blockSelf = self; next.NextViewControllerBlock = ^(NSString* text){ [blockSelf setLableText:text]; }; next.nextValueBlock = ^(NSInteger num){ NSString* str = [NSString stringWithFormat:@"%ld",num]; [blockSelf setLableText:str]; }; [self.navigationController pushViewController:next animated:YES];}-(void)setLableText:(NSString* )text{ label.text = text;}-(void)passTextValue:(NSString* )string{ label.text = string;}NextViewcontroller里面的代码:
.h
#import <UIKit/UIKit.h>typedef void (^NextValueBlock) (NSInteger num);@protocol NextVCDelagate <NSObject>-(void)passTextValue:(NSString* )string;@end@interface NextViewController : UIViewController@property(nonatomic,assign)id <NextVCDelagate>delegate;@property(nonatomic,copy) void (^NextViewControllerBlock)(NSString* text);@property(nonatomic,strong) NextValueBlock nextValueBlock;@end
.m
-(void)viewDidDisappear:(BOOL)animated{ [_delegate passTextValue:@"第二个页面 传值啦!"]; if (self.NextViewControllerBlock) { self.NextViewControllerBlock(@"00000000000"); } if (self.nextValueBlock) { self.nextValueBlock(4); }}
0 0
- Block使用介绍(-)
- Block,简单使用和介绍
- iOS block介绍和使用技巧(基础篇)
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- Block介绍(一)基础
- objc block的介绍和使用
- iOS:Block 编程1--介绍与使用
- objc block的介绍和使用
- Block 介绍
- Block 介绍 (IOS 开发 分享)
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- iOS中Block介绍(一)基础
- 织梦如何去掉首页的后缀
- URL传递参数长度限制
- nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)
- linux set ff unix
- leetcode-7-Reverse Integer
- Block使用介绍(-)
- android开发环境搭建(Studio版)
- linux下释放cache内存
- iOS就九宫格实现
- 大数问题
- python print
- 97.View the Exhibit and evaluate the structure and data in the CUST_STATUS table.
- 奇异值分解及几何意义
- The second day of learning java