OC基础 block使用

Posted zhangqing979797

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC基础 block使用相关的知识,希望对你有一定的参考价值。

main

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray* array=@[@1,@2,@3,@4];//[NSNumber numberWithInteger:1]
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"obj:%@,idx:%lu,stop:%d",obj,idx,*stop);
            *stop=YES; // *stop
            
//            对遍历的控制,想要让遍历过程停止的时候,将它调成yes就可以了;
           
            //block直译区块,它封装了一段代码,可以在任何时候执行,和传统的函数指针类似,可携带参数个返回值
            
//            返回类型(^block名称)(参数列表)
//            -int(^Sum)(int,int)=^(int a,int b){ return a+b;};
//            -函数指针 int(*Sum)(int,int)

//            typedef int(^MySum)(int,int);
//            -MySum sum=^(int a,int b){return a+b};

//            调用block
//            -int a =Sum(10,11); NSLog(@"%i",a)
                       
        }];
        // block 声明
        void(^show)(id)=^(id obj){
            NSLog(@"obj%@",obj);
      
        };
        
        // block 使用
        show(array);
        
        //
        typedef int (^operation)(int,int);
        operation add=^(int a,int b){
            return a+b;
        };
        operation sub=^(int a,int b){
            return a-b;
        };
        int sum= add(10,20);
        NSLog(@"sum=%d",sum);
        
        // block 和局部变量的关系 可以访问局部变量
        __block int i=10;
        void(^print)()=^{
         i=20; //block 不能修改局部变量 可以修改__block 修饰的变量
            NSLog(@"i=%d",i);
            
        };
        
        print();
        
        
    
        
        
    }
    return 0;
}

 

以上是关于OC基础 block使用的主要内容,如果未能解决你的问题,请参考以下文章

oc61--block

OC 中的block

OC中的block

Objective-C 基础之— Block本质+源码剖析

32-oc block

[OC学习笔记]Block三种类型