我是靠谱客的博主 欣慰鞋垫,最近开发中收集的这篇文章主要介绍block的基本用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 [block]:代码块,闭包;代码块是对一段代码的封装,代码块可以作为一个变量使用,类似于函数指针变量,可以作为函数的参数来进行传递,也可以直接在代码中匿名实现.

 block的定义和实现类似函数的声明和实现。


        

        

#pragma mark - 1

        //block的内部可以读取外部的局部变量,但是不能修改,要修改需要加上__block声明

        int c = 2 ;

        __block int c2 = 1 ;//block可以修改的局部变量,不适用___block是无法修改c的(不加,在block内部是只读的)

        int (^myBlocks)(int ,int); //声明一个block  在下面进行实现

        myBlocks = ^(int m ,int n){

            NSLog(@"%i %i",m,n);

            return m*n;

        };//block看成一个变量

         //调用block

        int r = myBlocks(7,8);

        NSLog(@"——————————————%i",r);

#pragma mark - 定义一个空的 block

        //block是一个数据类型

        //定义一个名字为block的变量 相当于 void(^)(void) block ;

        void(^block)(void);

        //block可以保存一个代码块

        //返回类型为void的代码块,返回类型体现在代码块的return

        block = ^(void){

            NSLog(@"hello");

        };

        NSLog(@"____________________");

        block();

        NSLog(@"____________________");

        

#pragma mark -定义了一个返回值为int,有两个参数的block变量

        int (^block2)(int ,int);

        block2 = ^(int a, int b){

            return a+b;

        };

        NSLog(@"%d",block2(8,9));

        //打印说明block'是一个对象,也需要遵循内存管理,对于block来说,我们要进行copy

        NSLog(@"%@",block2);


        int (^block3)(int,int) = [block2 copy];

        NSLog(@"%@",block3);

//        [block3 release];

//        也可以用系统提供的宏进行拷贝

//        int (^block4)(int ,int) = Block_copy(block2);

        

        __block NSString *str = @"hello";

        NSString *str1 = @"world";

        NSString *(^block5)(NSString *,NSString *);

        block5 = ^(NSString *s ,NSString *r){

            //注意,只能读取不能修改  ,如果想要修改,要用__block声明

            str = @"bsbbbsb";

            NSLog(@"str  = %@",str);

            NSLog(@"str1 = %@",str1);

            

            return [s stringByAppendingString:r];

        };

        NSLog(@"%@",block5(str,@"_1hello"));

        NSLog(@"str  = %@",str);

        

        

#pragma mark - dog类

        Dog *dog = [[Dog alloc]init];

        dog.dogBlock = ^(int count){

            for (int i = 0; i < count; i++) {

                NSLog(@"旺旺");

            }

        };

        [dog closeDoor];

        

     

        

        [dog dogEat:5 complation:^(int num) {

            NSLog(@"哈哈哈 num = %d",num);

        }];





#import <Foundation/Foundation.h>


//定义了一个block类型 ,,名字为dogBark,返回类型为void有一个int类型的参数的block

typedef  void(^DogBlock)(int num) ;


@interface Dog : NSObject


@property(nonatomic,copy) DogBlock dogBlock;



- (void)closeDoor ;

- (void)dogEat:(int)num complation:(DogBlock)dogBk;


@end



#import "Dog.h"


@implementation Dog



- (void)closeDoor{

    if (_dogBlock) {

        _dogBlock(arc4random()%10+1);

    }

}



- (void)dogEat:(int)num complation:(DogBlock)dogBk{

    //传入参数

    

    NSLog(@"....dog 吃完了 %d 食物",num);

    if (dogBk) {

        dogBk(1000);

    }

}


@end



        


最后

以上就是欣慰鞋垫为你收集整理的block的基本用法的全部内容,希望文章能够帮你解决block的基本用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部