美文网首页
Block介绍(一)

Block介绍(一)

作者: kingandyoga | 来源:发表于2016-05-22 19:55 被阅读40次

Block介绍(一)

一、概述

官方文档这是这样介绍block的

Block objects are a C-level syntactic and runtime feature. They
 are similar to standard C functions, but in addition to 
executable code they may also contain variable bindings to 
automatic (stack) or managed (heap) memory. A block can 
therefore maintain a set of state (data) that it can use to impact
 behavior when executed.

简单的说Block是C语言级别的语法。它对比C,在栈内存跟堆内软的饮用中更佳灵活。并且,block可以做为参数来传值。

二、入门

  1. 语法

在这里定义了两个block,他的名字是myBlock,返回值是前面那个int,参数是它后面括号里面的int,等于号后面是方法体。


int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};

typedef 下

typedef void (^BoolBlock)(BOOL);
//一个只接受一个BOOL参数,没有返回值的block
typedef int (^IntBlock)(void);
//一个没有参数,返回int的block
typedef BoolBlock (^HugeBlock)(IntBlock);
//看看,这个HugeBlock的参数和返回值都是block

三、例子

调用一下:

-(void)aMethod
{
    BoolBlock ablock = ^(BOOL b) {
        NSLog (@"Bool block !");
    };
    
    ablock(true);
}

作为参数返回一下:

typedef void (^BoolBlock) (BOOL);
- (BoolBlock)foo{
    BoolBlock ablock = ^(BOOL b ){
        NSLog(@"BOOL block!");
    };
    
    return  ablock;
}

类的成员对象

@interface BlockTest : NSObject

typedef void (^BoolBlock)(BOOL);
@property (nonatomic,copy)BoolBlock block;

@end

BlockTest *t = [[BlockTest alloc]init];
    t.block = ^(BOOL b){
        NSLog(@"BlockTest block call");
    };
    
    t.block(true);
    

其他函数的参数

- (void)foo(BoolBlock block)
{
    if (block) {
        block();
    }
}

其他block的参数

BoolBlock bBlock = ^(BOOL bV){if(Bv){/*do some thing*/}};
HugeBlock hBlock = ^(BoolBlock bB) {bB();};
 
hBolck(bBlock);

全局变量

static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};
int main()
{
    printf("%d\n", maxIntBlock(2,10));  
    return 0;
}

这里我们可以看到block的用法跟函数其实没有太大的区别,但是在这里需要强调一下。在声明block的属性时,它的修饰符应该是copy

四、_block

在block内修改block之外的变量的时候,应该对变量天假_block标记。

    __block int a = 0;
    t.block = ^(BOOL b){
        a++;
        NSLog(@"BlockTest block call");
    };
    

相关文章

  • iOS笔记--Block相关知识

    Block介绍(一)基础Block介绍(二)内存管理与其他特性block介绍(三)揭开神秘面纱(上)block介绍...

  • Block

    Block介绍 截获变量 __block修饰符 Block的内存管理 Block的循环引用 一、Block介绍 1...

  • Block介绍(一)

    Block介绍(一) 一、概述 官方文档这是这样介绍block的 简单的说Block是C语言级别的语法。它对比C,...

  • Block

    Block概念介绍 block是一段代码块,是一个对象 Block的声明 Block的定义 Block的快捷定义:...

  • Block 初见

    Block 初见 介绍 iOS block 的相关知识 目录 Block 背景知识 Block 使用方式 Bloc...

  • Block相关(二)

    前言,在上篇文章Block相关(一),中介绍了Block相关的基础知识,包括Block介绍、基础语法、使用情况等。...

  • block入门和简单使用(定义,做参数,做返回值,内存管理,循环

    本文略为全面的介绍block的使用:block定义方式,block传值,block循环引用,block内存管理,b...

  • iOS-Block 浅谈

    前言:Block 是开发过程中常用便捷的回调方式,本文简单介绍 Block 一、Block 简介 Block 对象...

  • block的基本概念摘要

    block基本介绍

  • iOS开发-block的使用(上)

    引言:本文旨在介绍block的基本用法,怎么定义一个block,怎样使用block. block的声明与定义 首先...

网友评论

      本文标题:Block介绍(一)

      本文链接:https://www.haomeiwen.com/subject/wpzorttx.html