NSObject+XWAdd.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //
  2. // NSObject+XWAdd.h
  3. // BuguLive
  4. //
  5. // Created by 岳克奎 on 16/9/1.
  6. // Copyright © 2016年 xfg. All rights reserved.
  7. //
  8. /*!
  9. 1.作用:对KVO && Notification 一句话调用扩展
  10. 2.使用 KVO:(销毁的时候其绑定的KVO会自己移除/主动把p=nil 也会使得KVO(name失效))
  11. 2.1 对象p p = [person new];
  12. 2.2 对象属性 p.name 监听name的变化 [p xw_addObserverBlockForKeyPath:@"name"
  13. block:^(id obj, id oldVal, id newVal){
  14. NSLog(ASLocalizedString(@"kvo,修改name为%@"), newVal);}];
  15. 2.3 修改anme的值
  16. 3.使用通知:Noti (可对post宏定义)(FanweNotificationHeader)
  17. 3.1 发通知 [[NSNotificationCenter defaultCenter] postNotificationName:ASLocalizedString(@"通知名")object:nil
  18. userInfo:@{@"test" : @"1"}];
  19. 3.2 收通知
  20. [self xw_addNotificationForName:ASLocalizedString(@"通知名")block:^(NSNotification *notification) {
  21. NSLog(ASLocalizedString(@"收到通知1:%@"), notification.userInfo); }];
  22. 3.3不需要dealloc
  23. */
  24. #import <Foundation/Foundation.h>
  25. NS_ASSUME_NONNULL_BEGIN
  26. @interface NSObject (XWAdd)
  27. #pragma mark - KVO
  28. /**
  29. * 通过Block方式注册一个KVO,通过该方式注册的KVO无需手动移除,其会在被监听对象销毁的时候自动移除,所以下面的两个移除方法一般无需使用
  30. *
  31. * @param keyPath 监听路径
  32. * @param block KVO回调block,obj为监听对象,oldVal为旧值,newVal为新值
  33. */
  34. - (void)xw_addObserverBlockForKeyPath:(NSString*)keyPath block:(void (^)(id obj, id oldVal, id newVal))block;
  35. /**
  36. * 提前移除指定KeyPath下的BlockKVO(一般无需使用,如果需要提前注销KVO才需要)
  37. *
  38. * @param keyPath 移除路径
  39. */
  40. - (void)xw_removeObserverBlockForKeyPath:(NSString *)keyPath;
  41. /**
  42. * 提前移除所有的KVOBlock(一般无需使用)
  43. */
  44. - (void)xw_removeAllObserverBlocks;
  45. #pragma mark - Notification
  46. /**
  47. * 通过block方式注册通知,通过该方式注册的通知无需手动移除,同样会自动移除
  48. *
  49. * @param name 通知名
  50. * @param block 通知的回调Block,notification为回调的通知对象
  51. */
  52. - (void)xw_addNotificationForName:(NSString *)name block:(void (^)(NSNotification *notification))block;
  53. /**
  54. * 提前移除某一个name的通知
  55. *
  56. * @param name 需要移除的通知名
  57. */
  58. - (void)xw_removeNotificationForName:(NSString *)name;
  59. /**
  60. * 提前移除所有通知
  61. */
  62. - (void)xw_removeAllNotification;
  63. /**
  64. * 发送一个通知
  65. *
  66. * @param name 通知名
  67. * @param userInfo 数据字典
  68. */
  69. - (void)xw_postNotificationWithName:(NSString *)name userInfo:(nullable NSDictionary *)userInfo;
  70. @end
  71. NS_ASSUME_NONNULL_END