ARNEventEmitter 0.1.0

ARNEventEmitter 0.1.0

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布最后发布2014 年 12 月

airin 维护。



  • xxxAIRINxxx

我的目标是实现 Node.js 的 EventEmmiter。

以及 KVO。

尊重

这受到了以下产品的启发。

要求

需要 iOS 5.0 或更高版本,并使用 ARC。

如何使用

emitterOn

对象 A (开启)

    [[self class] arn_emitterOn:@"test" owner:self needMainThreadCall:YES callbackBlock:^(id resultObject){
        // called MianThread
        NSLog(@"A");
    }];

对象 B (开启)

  [[self class] arn_emitterOn:@"test" owner:self needMainThreadCall:NO callbackBlock:^(id resultObject){
      // called  not MianThread
      NSLog(@"B");
  }];

对象 C (触发)

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn
  // called objectB emitterOn

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn
  // called objectB emitterOn

emitterOnce

对象 A (开启)

    [[self class] arn_emitterOn:@"test" owner:self needMainThreadCall:YES callbackBlock:^(id resultObject){
        // called MianThread
        NSLog(@"A");
    }];

对象 B (一次性)

  [[self class] arn_emitterOnce:@"test" owner:self needMainThreadCall:NO callbackBlock:^(id resultObject){
      // called  not MianThread
      NSLog(@"B");
  }];

对象 C (触发)

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn
  // called objectB emitterOnce

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn

emitterOff

对象 A (开启)

    [[self class] arn_emitterOn:@"test" owner:self needMainThreadCall:YES callbackBlock:^(id resultObject){
        // called MianThread
        NSLog(@"A");
    }];

对象 B (关闭)

  [[self class] arn_emitterOnce:@"test" owner:self needMainThreadCall:NO callbackBlock:^(id resultObject){
      // called  not MianThread
      NSLog(@"B");
      [self class] arn_emitterOff:@"test" owner:self];
  }];

对象 C (触发)

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn
  // called objectB emitterOn

  [[self class] arn_emitterEmit:@"test" resultObject:nil];
  // called objectA emitterOn

键值观察

注意!!

可以使用以下方式更换实现:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

KVO

  MyObject *objA = MyObject.new;
  MyObject *objB = MyObject.new;

  objA.count = 0;
  objB.count = 0;

  [objA arn_emitterObserve:objB keyPath:@"count" isOnce:NO needMainThreadCall:NO callbackBlock:^(id resutObject) {
        objA.count++;
  }];

  objB.count++;
  // call arn_emitterObserve

  objB.count++;
  // call arn_emitterObserve

  // objA.count == 2

许可协议

源代码在非病毒 MIT 许可协议下分发。

这是最简单、最宽容的许可协议。

日语文本

Node.js 圈广泛使用的 EventEmitter 对象在 Objective-C 中实现。

(并不与 Node.js 的 EventEmitter 对象具有相同的功能)