Objective-C入门20:Block

来源:互联网 发布:java开发工程师工资 编辑:程序博客网 时间:2024/06/13 13:01

Objective-C入门20:Block

main.m

#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        //        Block :闭包  又叫 代码 块    可以当做参数传递//        Block :也算是一个函数        //        Block(闭包)就是能够读取其他函数内部变量的函数//        Block  可以访问 修改 内部变量        //        使用 Block的好处 : 可以组织独立的代码段  提高代码的复用性 可读性//        Block 重要特点 : 常用于一个操作完成后的回调               //        block 公式  声明 和 实现        //   1、无返回值的Block 公式  //    2 、无返回值的Block 公式//        void ( ^block的名字 )(形参列表);//        block的名字 = ^(形参列表)//          {//                 具体实现代码//           } ;    //        有返回值的 Block 的公式//        返回值类型(^block的名字)(形参列表) =^(形参列表)//        {//            return 返回值类型的一个参数 ;//        } ;            #pragma mark---------------无返回值的Block 练习--------------------------------        void ( ^miao )() = ^()        {            NSLog( @"喵~" ) ;        } ;//        Block 的调用//               block的名字(实参)        miao( ) ;                        void ( ^wahaha )();        wahaha = ^()        {            NSLog(@"水~");        } ;        wahaha();                void( ^wangwang )( NSString *message ) = ^( NSString *message )        {            NSLog(@"%@" , message ) ;        } ;                            wangwang(@"变身狗妖");                        void ( ^miaomiao )(NSString *message1);        miaomiao = ^(NSString *message1 )        {            NSLog(@"%@" , message1 ) ;        } ;        miaomiao(@"变身猫妖" );                //        可以访问到另一个  方法(函数) 内部的临时变量//        不仅可以访问 还可以 修改(__block)  __block int v = 10 ;void(^sum)(int a , int b ) = ^(int a , int b )         {             v = a+b ;             NSLog(@"%d" , v ) ;         } ;        sum ( 100,101 ) ;__block int k = 10 ;        void ( ^sum1)( int a , int b );        sum1 = ^(int a , int b)        {            k=a+b;            NSLog(@"%d" ,k ) ;        } ;        sum1(20,5);                        __block NSString * aa = @"asffs" ;       void( ^zf )( NSString *bb ) = ^( NSString *bb )        {                         NSString *aabb = [ aa stringByAppendingString : bb ] ;            NSArray *all  = @[ aabb ] ;            NSLog( @"%@" , all ) ;        } ;        zf( @"是色鬼" );__block NSString * cc = @"tgar" ;        void ( ^zfc )(NSString *bb) ;        zfc = ^( NSString *bb )        {            NSString *ccbb = [ cc stringByAppendingString : bb ] ;            NSArray *all = @[ ccbb ];            NSLog(@"%@" , all ) ;        } ;        zfc( @"是流氓" );                        int (^summ)( int a,int b ) =^( int a,int b )        {            return a+b ;        } ;        NSLog( @"%d" , summ ( 1 , 50 )*25 ) ;                        NSMutableDictionary *dic = [ NSMutableDictionary dictionary ] ;        NSDictionary * (^add)() = ^()        {            [ dic setObject:@"wgfgfw" forKey:@"name" ] ;            NSDictionary *d =[ dic copy ] ;            return d ;        } ;        NSLog(@"%@",add());                NSString* (^leirong)(NSString *s) ;        leirong = ^(NSString *s)        {           NSString * bb = [NSString stringWithFormat: @"他说:%@ " , s ];            return bb ;        } ;        leirong ( @"你真帅" );        NSLog(@"%@" , leirong ( @"你真帅" ) );                        Person *p = [ [ Person alloc ] init ] ;        [ p aaaa ] ;            }    return 0;}


Person.h

#import <Foundation/Foundation.h>@interface Person : NSObject- (void)aaaa ; @end



Person.m

#import "Person.h"@implementation Person//block  回调函数//  带有 block 参数的函数公式//void 的地方 可以是其他返回值类型//  - ( 返回值类型 ) 函数名 : (void(^)(参数列表))block 名字//    {//    block 名字(实参);//    }- (void)aaaa{    [ self message:^(NSString *m)    {        NSLog(@"%@",m);    } ] ;        [ self area:^int(int w, int h) {        return w*h ;    } ] ; }- ( void ) message : (void(^)(NSString *m ))block{    block(@"世界原来如此美好") ;}// 计算并输出 矩形的面积的方法- (void)area: (int (^)(int w,int h))block    {        NSLog(@"矩形的面积:%d" , block(15,30) ) ;    }@end



0 0
原创粉丝点击