• IOS开发 Block的学习


      苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用.

      Block最大的作用是函数回调,简化代码.

      在ios中,将blocks当成对象来处理,它封装了一段代码,这段代码可以在任何时候执行。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。

    block官方定义:

    示例的详解如下: 


     

      注意block可以使用其定义范围内的变量.

      如果你把block声明为一个变量,你可以把它当一个函数(function,本文中特指C语言形式的函数)一样调用:

    block定义:

      int (^myBlock) (int a,int b) = ^(int a,int b){      

         return a+b;   

       };

       如果要修改就要加关键字:__block   双下划线哦!!!

      简单的回调,废话不多说,直接上代码!!!  第二个页面往第一个页面回调

      先在第二个页面定义一个块,然后写一个方法使用block;

      #import<UIKit/UIKit.h>

      typedefvoid(^myBlock)(NSString*,NSString*,NSInteger);

      @interfaceSecondViewController:UIViewController

      {

          myBlockblock;

      }

      -(void)passValueUsingBlock:(myBlock)block1;

      @end

       .m文件

      #import"SecondViewController.h"

      @interfaceSecondViewController()

      -(IBAction)Back:(id)sender;

      @end

      @implementationSecondViewController

      -(void)passValueUsingBlock:(myBlock)block1

      {

          block=block1;

      }

      -(void)viewDidLoad

      {

          [superviewDidLoad];

      }

      -(IBAction)Back:(id)sender{

          block(@"hello",@"女",21);

          [selfdismissViewControllerAnimated:YEScompletion:nil];

      }

      @end

      在第一个页面调用这个方法

      

    #import"RootViewController.h"

    #import"SecondViewController.h"

    @interfaceRootViewController()

    @property(weak,nonatomic)IBOutletUITextField*name;

    @property(weak,nonatomic)IBOutletUITextField*sex;

    @property(weak,nonatomic)IBOutletUITextField*age;

    -(IBAction)Push:(id)sender;

    @end

    @implementationRootViewController

    -(void)viewDidLoad

    {

        [superviewDidLoad];

        //Doanyadditionalsetupafterloadingtheviewfromitsnib.

    }

    -(IBAction)Push:(id)sender{

        SecondViewController*second=[[SecondViewControlleralloc]init];

        [secondpassValueUsingBlock:^(NSString*name,NSString*sex,NSIntegerage){

            self.name.text=name;

            self.sex.text=sex;

            self.age.text=[NSStringstringWithFormat:@"%d",age];

        }];

        [selfpresentViewController:secondanimated:YEScompletion:nil];

    }

    @end

      

  • 相关阅读:
    福大软工1816 · 第四次作业
    福大软工1816 · 第三次作业
    福大软工1816 · 第二次作业
    福大软工1816 · 第四次作业
    福大软工1816 · 第三次作业
    Alpha 冲刺 (4/10)
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    项目需求分析
  • 原文地址:https://www.cnblogs.com/moyunmo/p/3371599.html
Copyright © 2020-2023  润新知