object c block

//
//  main.m
//  Block
//
//  Created by 千雅爸爸 on 16/10/7.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Parent.h"
#import "Guider.h"
//c语言函数支针
void test(){
    printf("%s\n",__func__);
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //相当于c语言的函数指针
        void (*testPtr)() = test;
        //使用函数指针调用函数;
        test();
        testPtr();
        
        //如何去声明block,注意block 是在main函数的内部的
        void (^testBlock)() = ^(){
            test();
            NSLog(@"info");
        };
        //调用block
        testBlock();
        
        int __block number =2;//要想在block 中使用必须要添加__block
        //为什么这里使用的是int,而不是nsinteger
        int (^sumBlock)(int,int) = ^(int a, int b){
            number = 3;
            return a+b;
        };
        NSLog(@"sum = %d",sumBlock(1,2));
        
        NSLog(@"number=%d",number);
        
        //++++block 在类中的使用+++++++++
        Parent *parent = [[Parent alloc] init];
        Guider *guider = [[Guider alloc]init];
        //block作为参数
        [parent goOutSideWithAction:^{
            [guider lookafterBaby];
        }];
        //block作为属性,因为是property 所以可以使用set,然后把block放在参数里面
        [parent setActionBlock:^{
            [guider lookafterBaby];
        }];
        [parent cooking];
    }
    return 0;
}


Parent.h

//
//  Parent.h
//  Block
//
//  Created by 千雅爸爸 on 16/10/7.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Parent : NSObject

@property (nonatomic,copy) NSString *name;
//家长出门,需要另外一个人去帮忙看一下小孩,需要两个类进行交互的时候,可以考虑用block
//有两种方式,第一个作为行参,第二个是作为让block 做为类的属性进行出现
-(void)goOutSideWithAction:(void (^)())action;
@property (nonatomic,copy) void (^actionBlock)();//必须是copy

-(void)cooking;
@end

//
//  Parent.m
//  Block
//
//  Created by 千雅爸爸 on 16/10/7.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import "Parent.h"

@implementation Parent

-(void)goOutSideWithAction:(void (^)())action{
    NSLog(@"家长出门了");
    //block的实现部分和调用部分进行分离
    action();
}

-(void)cooking{
    NSLog(@"家长开始做饭了,cooking");
    if(self.actionBlock){//首先判断是否存在
        self.actionBlock();
    }
}

@end

//
//  Guider.h
//  Block
//
//  Created by 千雅爸爸 on 16/10/7.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Guider : NSObject
-(void)lookafterBaby;
@end

//
//  Guider.m
//  Block
//
//  Created by 千雅爸爸 on 16/10/7.
//  Copyright © 2016年 kodulf. All rights reserved.
//

#import "Guider.h"

@implementation Guider
-(void)lookafterBaby{
    NSLog(@"Guider 看护小孩");
}
@end

http://blog.csdn.net/rodulf/article/details/52750955

1.Java代码说明blcok
就是Java中匿名内部类,而匿名内部类的好处是代码更清晰
例如
button btn = new Button().setListener(newListener(){
//  这里写上监听的代码,这样就可以很直观的观察到这个btn要干啥了
//  例如这里写个发送邮件的代码,这样人们就知道你这按钮是点击后是发    //送邮件的功能
});






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值