码迷,mamicode.com
首页 > 其他好文 > 详细

Block

时间:2014-11-28 17:31:05      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   ar   os   使用   sp   strong   on   bs   代码   

Block

 

目录

  • 概述——对Block的理解
  • Block的操作

       创建Block

       使用Block

  • Block的用途

  

概述——对Block的理解

     Block代码块,有时候我们可以把功能代码块的封装放到block里面,然后通过使用block来实现某些功能,除此之外,block还有很多其他强大的功能

 

Block的操作

创建Block

返回类型 (^block名)(参数列表) = ^(参数列表){      };

例如

void (^myblock)( ) = ^( ){   };

int (^myblock)( int,int) = ^(int a,int b){对a、b的处理};

使用Block

需要带上“( )”,例如:myblock( );myblock(10,20);

block里面改变外部的局部变量

  • block内部可以访问外部变量
  • 默认情况下,block内部不能修改外部的局部变量
  • 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改

使用typedef定义block类型(和指向函数的指针很像),感觉有点像面向对象编程中松耦合和多态的思想,例如:

typedef int (^myblock3)(int,int);

myblock3 block0,block1;

block0 = ^(int a,int b){return a-b;};

block1 = ^(int a,int b){return a+b;};

 

Block的用途

界面传值

在SecondViewController.h中定义一个block,并用该block给SecondViewContrller声明一个block对象

typedef void (^PassValueBlock)(NSString *);

@property (nonatomic,copy) PassValueBlock passValueBlock;

当SecondViewController消失时,调回到第一个界面所做处理

if(_passValueBlock !=nil &&![_textField.text isEqualToString:@""]){

_passValueBlock(_textField.text);

}

在FirstViewController中,跳转前所做处理

PassValueBlock block = ^(NSString *str){

  _showLabel.text = str;

};

secondVC.passValueBlock = block;

回调

 

Block

标签:style   ar   os   使用   sp   strong   on   bs   代码   

原文地址:http://www.cnblogs.com/IOS-Developer/p/4128683.html

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