码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发——语法&高级Block练习

时间:2015-07-18 00:17:53      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

高级Block练习

一 .最简单的block使用 

 使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数

定义一个block的构成包括:返回值,block名,参数类型。

block代码块作为一个匿名函数是可以被写在其他方法中的,所以一般我们将block代码块写在其他方法里,调用该方法的时候block代码块将不会被执行,只有回调block代码块的时候,才会执行。

ViewController.h

 1 #import <UIKit/UIKit.h>
 2 
 3 @interface ViewController : UIViewController
 4 
 5 @property(nonatomic,copy) void(^myBlock)(int);//1.声明一个block变量,直接将block声明成一个属性变量更方便实用。
 6 
 7 @end
 8 
 9 ViewController.m
10 
11 #import "ViewController.h"
12 
13 #import "NewViewController.h"
14 
15 @interface ViewController ()
16 
17 @end
18 
19 @implementation ViewController
20 
21 - (void)viewDidLoad {
22 
23 [super viewDidLoad];
24 
25 //注意:先加载写block代码块的方法
26 
27 [self blockTest];
28 
29 }
30 
31 -(void)blockTest{
32 
33 //2.在方法里面写block代码块
34 
35 _myBlock = ^(int a){
36 
37 NSLog(@"%d",a);
38 
39 };
40 
41 }
42 
43 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
44 
45 //3.调用block匿名函数
46 
47 _myBlock (10);
48 
49 NewViewController * newViewController = [[NewViewController alloc]init];
50 
51 newViewController.block = _myBlock;
52 
53 [self presentViewController:newViewController animated:YES completion:^{
54 
55 }];
56 
57 }
58 
59 @end

 

上面代码,在ViewController里面实现了block实现的三个步骤,该block的功能就是打印参数值。

 

touch方法实现从ViewController到NewViewController的跳转,同时将ViewController里面的block即myBlock赋给NewViewController里定义的block,使得两个block实质上成为同一个block,这样,在NewViewController里面就耶可以调用ViewController里的代码块了。

NewViewController.h

1 #import <UIKit/UIKit.h>
2 
3 #import "ViewController.h"
4 
5 @interface NewViewController : UIViewController
6 
7 @property(nonatomic,copy)void(^block)(int a);
8 
9 @end

 

NewViewController.m

 1 #import "NewViewController.h"
 2 
 3 @interface NewViewController ()
 4 
 5 @end
 6 
 7 @implementation NewViewController
 8 
 9 - (void)viewDidLoad {
10 
11 [super viewDidLoad];
12 
13 self.view.backgroundColor=[UIColor grayColor];
14 
15 }
16 
17 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
18 
19 self.block(100);
20 
21 [self dismissViewControllerAnimated:YES completion:^{
22 
23 }];
24 
25 }
26 
27 @end

 

二.block其他定义类型

通过typedef声明block类型(因为block没有类型,用typedef声明一个类型)。如下两个声明了两个finishedblock类型的block。

 

 1 #import <UIKit/UIKit.h>
 2 
 3 typedef int(^FinishedBlock)(int);     //此处FinishedBlock不是block变量,而是一种类型,即FinishedBlock类型。
 4 
 5 @interface ViewController : UIViewController
 6 
 7 {
 8 
 9 FinishedBlock block1; //typedef声明一个FinishedBlock后,就可以用该类型定义block变量。
10 
11 }
12 
13 @property(nonatomic,copy) FinishedBlock block2;
14 
15 @end
16 
17 #import "ViewController.h"
18 
19 @interface ViewController ()
20 
21 @end
22 
23 @implementation ViewController
24 
25 - (void)viewDidLoad {
26 
27 [super viewDidLoad];
28 
29 block1 = ^(int a){
30 
31 NSLog(@"%d",a);
32 
33 return a;
34 
35 };
36 
37 _block2 = ^(int a){
38 
39 NSLog(@"%d",a);
40 
41 return a;
42 
43 };
44 
45 FinishedBlock block3 = ^(int a){
46 
47 NSLog(@"%d",a);
48 
49 return a;
50 
51 };
52 
53 block3(30);//回调
54 
55 [self test];
56 
57 }
58 
59 -(void)test{
60 
61 //回调
62 
63 block1(10);
64 
65 _block2(20);
66 
67 }
68 
69 @end

 

打印结果:

2015-07-15 20:57:22.226 Test[618:21849] 30

2015-07-15 20:57:22.227 Test[618:21849] 10

2015-07-15 20:57:22.227 Test[618:21849] 20

三.block作为参数传递

 1 #import <UIKit/UIKit.h>
 2 
 3 typedef int(^FinishedBlock)(int);
 4 
 5 @interface ViewController : UIViewController
 6 
 7 @end
 8 
 9 #import "ViewController.h"
10 
11 @interface ViewController ()
12 
13 @end
14 
15 @implementation ViewController
16 
17 - (void)viewDidLoad {
18 
19 [super viewDidLoad];
20 
21 [self testBlock:^int(int a) {
22 
23 NSLog(@"%d",a);
24 
25 return a;
26 
27 }];
28 
29 }
30 
31 -(void)testBlock:(FinishedBlock)block{
32 
33 block(1000);//回调
34 
35 }
36 
37 @end

 

iOS开发——语法&高级Block练习

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4655846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!