zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    [转载]DataView详解
    (转)C#中“EQUALS”与“==”的速度比较
    CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files oot921bbfc4ca7cf42App_Code.fu98jwep.dll”--“拒绝访问。 ”
    C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
    C# 利用mysql.data 在mysql中创建数据库及数据表
    【转载】经典SQL语句大全
    我不是一个做产品人,但我有一颗做产品的心--浅谈“痛点”
    软件工程--个人总结
    第十六周进度条
    梦断代码阅读笔记3
  • 原文地址:https://www.cnblogs.com/moyunmo/p/3371599.html
Copyright © 2011-2022 走看看