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

12-Objective-C特有语法:(高效率)block数据类型

时间:2014-05-12 13:01:45      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

一、         基本简介

  • block用来保存一段代码 

    block的标志:^

  • block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
  • 苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
  • block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码)


二、        Block的特性

  • block特性

 1> 如何定义block变量

bubuko.com,布布扣
 int (^mySumBlock)(int, int);
bubuko.com,布布扣

 2> 如何利用block封装代码

bubuko.com,布布扣
 ^(int a, int b) {
    return a + b;
 };

 ^() {
    NSLog(@"----------");
 };

 ^ {
    NSLog(@"----------");
 };
bubuko.com,布布扣

 3> block访问外面变量

以代码示例为例:

bubuko.com,布布扣
void test3()
{
    int a = 10;
bubuko.com,布布扣
// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
bubuko.com,布布扣
    __block int b = 20;
    
    void (^block)();   
    
    block = ^{
        // block内部可以访问外面的变量
        NSLog(@"a = %d", a);
        
        // 默认情况下,block内部不能修改外面的局部变量
        // a = 20;
        
        // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
        b = 25;
    };        
    block();
}
bubuko.com,布布扣

 4> 利用typedef定义block类型

  可先用typedef先声明类型,再定义变量进行赋值

bubuko.com,布布扣
 typedef int (^MyBlock)(int, int);  // 以后就可以利用MyBlock这种类型来定义block变量

 MyBlock block;

 MyBlock b1, b2;

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

 MyBlock b2 = ^(int a, int b) {
    return a - b;
 };
bubuko.com,布布扣
  • 与函数对比:

  es: 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现

 

  在声明的同时定义变量,然后赋值
bubuko.com,布布扣
int (^MySumBlock)(int, int) = ^(int a, int b) {
  return a+b;
};

 //    ps:   如果block没有形参,可以省略后面的()

bubuko.com,布布扣

     pk(对比一下)指向函数的指针:

bubuko.com,布布扣
int sum(int a , int b)
{
     return a + b;    
}

int main()
{
      // 指针函数的指针
     int (*p)(int, int) = sum;
     int d = p(10, 12);
     NSLog(@"%d", d);
}
    
bubuko.com,布布扣

12-Objective-C特有语法:(高效率)block数据类型,布布扣,bubuko.com

12-Objective-C特有语法:(高效率)block数据类型

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/lszwhb/p/3720282.html

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