iOS 給父類傳送訊息
<pre>
@interface NSObject (QMUI)
/**
對 super 傳送訊息
@param aSelector 要傳送的訊息
@return 訊息執行後的結果
@link http://stackoverflow.com/questions/14635024/using-objc-msgsendsuper-to-invoke-a-class-method
*/
- (id)performSelectorToSuperclass:(SEL)aSelector;
/**
對 super 傳送訊息
@param aSelector 要傳送的訊息
@param object 作為引數傳過去
@return 訊息執行後的結果
@link http://stackoverflow.com/questions/14635024/using-objc-msgsendsuper-to-invoke-a-class-method
*/
- (id)performSelectorToSuperclass:(SEL)aSelector withObject:(id)object;
/**
遍歷某個 protocol 裡的所有方法
@param protocol 要遍歷的 protocol,例如 @protocol(xxx)
@param block 遍歷過程中呼叫的 block
*/
- (void)enumerateProtocolMethods:(Protocol *)protocol usingBlock:(void (^)(SEL selector))block;
@end
</pre>
<pre>
@implementation NSObject (QMUI)
-
(id)performSelectorToSuperclass:(SEL)aSelector {
struct objc_super mySuper;
mySuper.receiver = self;
mySuper.super_class = class_getSuperclass(object_getClass(self));id (*objc_superAllocTyped)(struct objc_super *, SEL) = (void )&objc_msgSendSuper;
return (objc_superAllocTyped)(&mySuper, aSelector);
} -
(id)performSelectorToSuperclass:(SEL)aSelector withObject:(id)object {
struct objc_super mySuper;
mySuper.receiver = self;
mySuper.super_class = class_getSuperclass(object_getClass(self));id (*objc_superAllocTyped)(struct objc_super *, SEL, ...) = (void )&objc_msgSendSuper;
return (objc_superAllocTyped)(&mySuper, aSelector, object);
}
- (void)enumerateProtocolMethods:(Protocol *)protocol usingBlock:(void (^)(SEL))block {
unsigned int methodCount = 0;
struct objc_method_description *methods = protocol_copyMethodDescriptionList(protocol, NO, YES, &methodCount);
for (int i = 0; i < methodCount; i++) {
struct objc_method_description methodDescription = methods[i];
if (block) {
block(methodDescription.name);
}
}
free(methods);
}
@end
</pre>
相關文章
- iOS 傳送位置訊息iOS
- iOS 訊息傳送與轉發詳解iOS
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- 訊息中介軟體—RocketMQ訊息傳送MQ
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- 鴻蒙傳送訊息通知鴻蒙
- iOS 環信 EaseUI 的使用一:可傳送類似名片自定義的訊息iOSUI
- RocketMQ(九):訊息傳送(續)MQ
- TNW-傳送模板訊息TNW
- 6-RocketMQ傳送訊息MQ
- 如何在linux中傳送訊息給別的控制檯Linux
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- RocketMQ中Producer訊息的傳送MQ
- 傳送不同型別的訊息型別
- RocketMQ -- 訊息傳送儲存流程MQ
- Kafka -- 訊息傳送儲存流程Kafka
- 快速向 Google Chat 傳送訊息Go
- 小程式傳送訂閱訊息
- 如何使用釘釘群機器人給釘釘群傳送訊息機器人
- Runtime備忘-訊息傳送流程
- 分散式事務:訊息可靠傳送分散式
- django+小程式傳送模板訊息Django
- Python呼叫飛書傳送訊息Python
- WIN32傳送自定義訊息Win32
- 以事務方式傳送 Kafka 訊息Kafka
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 一張圖進階 RocketMQ - 訊息傳送MQ
- RocketMQ - 生產者訊息傳送流程MQ
- Laravel 佇列訊息與傳送郵件Laravel佇列
- Android Handler 訊息傳送效能優化Android優化
- RocketMQ(6)---傳送普通訊息(三種方式)MQ
- Pulsar訊息傳送、消費架構概述架構
- Kafka、RabbitMQ、RocketMQ訊息中介軟體的對比 —— 訊息傳送效能KafkaMQ
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- 千牛自動傳送訊息怎麼發?來試試UiBot千牛訊息傳送機器人UI機器人
- 小碼哥iOS學習筆記第十三天:訊息傳送iOS筆記