FWClassWrapper

@interface FWClassWrapper : NSObject

框架类包装器

注意:当包装器方法中存在异步调用或者需要监听通知时,不能直接使用self,因为包装器随时可被释放。 可视情况使用base内部分类、weakBase或者内部target等方式解决,代码示例: __weak NSObject *weakBase = self.base; [self asyncMethod:^(){ [weakBase.fw syncMethod]; }];

[self.base innerAsyncMethod];

[self.base addTarget:self.innerTarget action:action forControlEvents:controlEvents];

  • 原始类

    Declaration

    Objective-C

    @property (nonatomic, readonly) Class _Nonnull base;
  • fw

    Unavailable

    禁用属性

    Declaration

    Objective-C

    @property (nonatomic, strong, readonly) NS_UNAVAILABLE FWClassWrapper *fw;
  • 获取关联的对象包装器类

    Declaration

    Objective-C

    @property (nonatomic, readonly) Class _Nonnull wrapperClass;
  • 创建包装器

    Declaration

    Objective-C

    - (nonnull instancetype)init:(nonnull Class)base;

Subject

  • 发送类点对点消息

    Declaration

    Objective-C

    - (void)sendMessage:(nonnull NSNotificationName)name
             toReceiver:(nonnull id)receiver;

    Parameters

    name

    消息名称

    receiver

    消息接收者

  • 发送类点对点消息,附带对象

    Declaration

    Objective-C

    - (void)sendMessage:(nonnull NSNotificationName)name
                 object:(nullable id)object
             toReceiver:(nonnull id)receiver;

    Parameters

    name

    消息名称

    object

    消息对象

    receiver

    消息接收者

  • 发送类点对点消息,附带对象和用户信息

    Declaration

    Objective-C

    - (void)sendMessage:(nonnull NSNotificationName)name
                 object:(nullable id)object
               userInfo:(nullable NSDictionary *)userInfo
             toReceiver:(nonnull id)receiver;

    Parameters

    name

    消息名称

    object

    消息对象

    userInfo

    用户信息

    receiver

    消息接收者

  • 发送广播通知

    Declaration

    Objective-C

    - (void)postNotification:(nonnull NSNotificationName)name;

    Parameters

    name

    通知名称

  • 发送广播通知,附带对象

    Declaration

    Objective-C

    - (void)postNotification:(nonnull NSNotificationName)name
                      object:(nullable id)object;

    Parameters

    name

    通知名称

    object

    通知对象

  • 发送广播通知,附带对象和用户信息

    Declaration

    Objective-C

    - (void)postNotification:(nonnull NSNotificationName)name
                      object:(nullable id)object
                    userInfo:(nullable NSDictionary *)userInfo;

    Parameters

    name

    通知名称

    object

    通知对象

    userInfo

    用户信息

Exchange

  • 交换类实例方法。复杂情况可能会冲突

    Declaration

    Objective-C

    - (BOOL)exchangeInstanceMethod:(nonnull SEL)originalSelector
                     swizzleMethod:(nonnull SEL)swizzleSelector;

    Parameters

    originalSelector

    原始方法

    swizzleSelector

    交换方法

    Return Value

    是否成功

  • 交换类静态方法。复杂情况可能会冲突

    Declaration

    Objective-C

    - (BOOL)exchangeClassMethod:(nonnull SEL)originalSelector
                  swizzleMethod:(nonnull SEL)swizzleSelector;

    Parameters

    originalSelector

    原始方法

    swizzleSelector

    交换方法

    Return Value

    是否成功

  • 交换类实例方法为block实现。复杂情况可能会冲突

    Note

    swizzleBlock示例:^(__unsafe_unretained UIViewController selfObject, BOOL animated){ ((void()(id, SEL, BOOL))objc_msgSend)(selfObject, swizzleSelector, animated); }

    Declaration

    Objective-C

    - (BOOL)exchangeInstanceMethod:(nonnull SEL)originalSelector
                     swizzleMethod:(nonnull SEL)swizzleSelector
                         withBlock:(nonnull id)swizzleBlock;

    Parameters

    originalSelector

    原始方法

    swizzleSelector

    交换方法

    swizzleBlock

    实现block

    Return Value

    是否成功

  • 交换类静态方法为block实现。复杂情况可能会冲突

    Note

    swizzleBlock示例:^(__unsafe_unretained Class selfClass, BOOL animated){ ((void(*)(id, SEL, BOOL))objc_msgSend)(selfClass, swizzleSelector, animated); }

    Declaration

    Objective-C

    - (BOOL)exchangeClassMethod:(nonnull SEL)originalSelector
                  swizzleMethod:(nonnull SEL)swizzleSelector
                      withBlock:(nonnull id)swizzleBlock;

    Parameters

    originalSelector

    原始方法

    swizzleSelector

    交换方法

    swizzleBlock

    实现block

    Return Value

    是否成功

  • 生成原始方法对应的随机交换方法

    Declaration

    Objective-C

    - (nonnull SEL)exchangeSwizzleSelector:(nonnull SEL)selector;

    Parameters

    selector

    原始方法

    Return Value

    交换方法

Swizzle

  • 通用swizzle替换方法为block实现,支持类和对象,identifier有值且相同时仅执行一次。复杂情况不会冲突,推荐使用

    Declaration

    Objective-C

    - (BOOL)swizzleMethod:(nullable id)target
                 selector:(nonnull SEL)originalSelector
               identifier:(nullable NSString *)identifier
                withBlock:
                    (nonnull id _Nonnull (^)(Class _Nonnull, SEL _Nonnull,
                                             IMP _Nonnull (^_Nonnull)(void)))block;

    Parameters

    target

    目标类或对象

    originalSelector

    原始方法

    identifier

    唯一标识,有值且相同时仅执行一次

    block

    实现句柄

    Return Value

    是否成功

  • 使用swizzle替换类实例方法为block实现。复杂情况不会冲突,推荐使用

    Declaration

    Objective-C

    - (BOOL)swizzleInstanceMethod:(nonnull Class)originalClass
                         selector:(nonnull SEL)originalSelector
                        withBlock:(nonnull id _Nonnull (^)(
                                      Class _Nonnull, SEL _Nonnull,
                                      IMP _Nonnull (^_Nonnull)(void)))block;

    Parameters

    originalClass

    原始类

    originalSelector

    原始方法

    block

    实现句柄

    Return Value

    是否成功

  • 使用swizzle替换类静态方法为block实现。复杂情况不会冲突,推荐使用

    Declaration

    Objective-C

    - (BOOL)swizzleClassMethod:(nonnull Class)originalClass
                      selector:(nonnull SEL)originalSelector
                     withBlock:(nonnull id _Nonnull (^)(
                                   Class _Nonnull, SEL _Nonnull,
                                   IMP _Nonnull (^_Nonnull)(void)))block;

    Parameters

    originalClass

    原始类

    originalSelector

    原始方法

    block

    实现句柄

    Return Value

    是否成功

  • 使用swizzle替换类实例方法为block实现,identifier相同时仅执行一次。复杂情况不会冲突,推荐使用

    Declaration

    Objective-C

    - (BOOL)swizzleInstanceMethod:(nonnull Class)originalClass
                         selector:(nonnull SEL)originalSelector
                       identifier:(nonnull NSString *)identifier
                        withBlock:(nonnull id _Nonnull (^)(
                                      Class _Nonnull, SEL _Nonnull,
                                      IMP _Nonnull (^_Nonnull)(void)))block;

    Parameters

    originalClass

    原始类

    originalSelector

    原始方法

    identifier

    唯一标识

    block

    实现句柄

    Return Value

    是否成功

  • 使用swizzle替换类静态方法为block实现,identifier相同时仅执行一次。复杂情况不会冲突,推荐使用

    Declaration

    Objective-C

    - (BOOL)swizzleClassMethod:(nonnull Class)originalClass
                      selector:(nonnull SEL)originalSelector
                    identifier:(nonnull NSString *)identifier
                     withBlock:(nonnull id _Nonnull (^)(
                                   Class _Nonnull, SEL _Nonnull,
                                   IMP _Nonnull (^_Nonnull)(void)))block;

    Parameters

    originalClass

    原始类

    originalSelector

    原始方法

    identifier

    唯一标识

    block

    实现句柄

    Return Value

    是否成功

Class

  • 获取类方法列表,支持meta类(objc_getMetaClass)

    Declaration

    Objective-C

    - (nonnull NSArray<NSString *> *)classMethods:(nonnull Class)clazz
                                       superclass:(BOOL)superclass;

    Parameters

    clazz

    指定类

    superclass

    是否包含父类,包含则递归到NSObject

    Return Value

    方法列表

  • 获取类属性列表,支持meta类(objc_getMetaClass)

    Declaration

    Objective-C

    - (nonnull NSArray<NSString *> *)classProperties:(nonnull Class)clazz
                                          superclass:(BOOL)superclass;

    Parameters

    clazz

    指定类

    superclass

    是否包含父类,包含则递归到NSObject

    Return Value

    属性列表

  • 获取类Ivar列表,支持meta类(objc_getMetaClass)

    Declaration

    Objective-C

    - (nonnull NSArray<NSString *> *)classIvars:(nonnull Class)clazz
                                     superclass:(BOOL)superclass;

    Parameters

    clazz

    指定类

    superclass

    是否包含父类,包含则递归到NSObject

    Return Value

    Ivar列表