zoukankan      html  css  js  c++  java
  • Block

    Block

     

    目录

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

           创建Block

           使用Block

    • Block的用途

    界面传值

    block作为函数参数

    • Delegate、Block和Notification的区别与联系

      

    概述——对Block的理解

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

     

    Block的操作

    创建Block

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

    例如

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

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

    使用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作为函数参数

    函数定义

    -(void)compareA:(int)numA andB:(int)numB withBigger:(void (^)(int p))big andSmaller:(void (^)(int p))small{

    if(numA>numB){

      big(numA+numB);

    }else{

      small(numA-numB);

    }  

    }

    函数调用

    [myClass compareA:10 andB:20 withBigger:^(int p){

      //block对函数定义里所生成的p做的处理

    }andSmaller:^(int p){

      //block对函数定义里所生成的p做的处理

    }];

     

    Delegate、Block和Notification的区别与联系

    区别

     

    1. Most delegate protocols have a handful of messages.

     

     we can say that “If an object has more than one distinct event, use delegation.”

    2. An object can only have one delegate.

     

  • 相关阅读:
    Object-C 声明属性为什么用下划线,代码规范和编程风格
    iOS API 概述
    iOS 彻底学会使用delegate
    iOS NSNotification的使用
    L1_6 连续因子
    天梯 L1_46整除光棍
    51-Nod 1279
    UVA
    hdu 1078
    Poj 1088 滑雪 递归实现
  • 原文地址:https://www.cnblogs.com/IOS-Developer/p/4128683.html
Copyright © 2011-2022 走看看