Objective-C入门20:Block

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值