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

      

  • 相关阅读:
    jsp文件中charset和pageEncoding的区别
    如果jsp表单元素的值为空,如何避免null出现在页面上?
    C# 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
    正则表达式
    事件委托与键盘事件
    事件对象的兼容性
    作用域解析题
    事件冒泡与事件铺获的解析
    浏览器内核
    js中级总结
  • 原文地址:https://www.cnblogs.com/moyunmo/p/3371599.html
Copyright © 2011-2022 走看看