利用blocks实现delegate方法

两个对象在通信时,利用block,其中一个类声明一个block,另一个类包含前一个类的对象,通过设置block函数,把回调函数的实现传递给第一个类

dog.h

#import <Foundation/Foundation.h>

@interface dog : NSObject
{
  @public
    int _ID;
    NSTimer  *timer;
    int barkCount;
    void (^BarkCallBack)(dog *thisDog,int count);
}
@property(assign,nonatomic) int ID;

-(void)setBark:(void (^)(dog *thisDog,int count))eachBark;
@end



dog.m:

#import "dog.h"

@implementation dog

-(id)init
{
    self=[super init];
    if(self)
    {
        NSLog(@"dog init start");
        barkCount=0;
        [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(bark:) userInfo:nil repeats:YES];
        //timer=[NSTimer timerWithTimeInterval:1 target:self selector:@selector(bark:) userInfo:nil repeats:YES];
    }
    return self;
}
-(void)bark:(NSTimer *)timer
{
    barkCount++;
    NSLog(@"dog %d bark count %d",self.ID,barkCount);
    
    if (BarkCallBack) {
        BarkCallBack(self,barkCount);
    }
}

-(void)setBark:(void (^)(dog *thisDog,int count))eachBark
{
    [eachBark release];
    BarkCallBack=[eachBark copy];
}
-(void)dealloc
{
    [super dealloc];
}

person.h

#import <Foundation/Foundation.h>
#import "dog.h"
@interface person : NSObject
@property(nonatomic,retain)dog *dobObj;

@end

person.m:

#import "person.h"

@implementation person

-(void)setDobObj:(dog *)dobObj
{
  if(_dobObj!=dobObj)
  {
      [_dobObj release];
      _dobObj=[dobObj retain];
      [_dobObj setBark:^(dog *thisDog, int count) {
          NSLog(@"person dog %d count %d",thisDog.ID,count);
      }];
  }
}
@end

main函数:

#import <Foundation/Foundation.h>
#import "person.h"
#import "dog.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        person *andy=[[person alloc] init];
        dog  *heibei=[[dog alloc] init];
        heibei.ID=10;
        
        andy.dobObj=heibei;
        
        while (1) {
            [[NSRunLoop currentRunLoop] run];
        }
        [heibei release];
        NSLog(@"Hello, World!");
        
    }
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值