Category,Extension,NSNotificatio

2019-06-18  本文已影响0人  分流替躺欧阳克

category 作用

特点

编译时编译分类代码,但是到运行时才把分类方法属性协议代理等添加到宿主类

可以添加哪些内容

category结构体

struct category_t {
  const char *name;//分类名称
  classref_t cls://所属类
  struct method_list_t *instanceMethods;
  struct method_list_t *classMethods;
  struct protocol_list_t *protocols;
  struct property_list_t *instanceMethods;

  method_list_t *methodsForMeta(bool isMeta){
    if(isMeta) return classMethods;
    else return instanceMethods;
  }
property_list_t *propertiesForMeta_(bool isMeta){
if(isMeta)return nil;
else return instanceProperties;
}
}

扩展(Extension)

代理(Delegate)

通知(NSNotification)
通知者发生消息,经由通知中心向多个接收者发送消息

KVO(key-value-observing)
KVO是Objective-C对观察者设计模式的又一实现。
Apple使用了isa混写(isa-swizzling)来实现KVO
当调用addObserver方法后,系统会在运行时动态创建NSKVONotifying_A这么个类,将原来的类的isa指针指向这个类,通过重这个类的set方法实现通知观察者

- (void)setValue:(id)obj
{
[self willChangeValueForKey:@"KeyPath"];
[super setValue:obj];
[self didChangeValueForKey:@"KeyPath"];
}

我们手动调用[self willChangeValueForKey:@"KeyPath"];[self didChangeValueForKey:@"KeyPath"];这两个方法也能达到调用监听回调的方法。

上一篇下一篇

猜你喜欢

热点阅读