nspoxy

  • NSProxy是蘋果官方推薦專門用來做消息轉(zhuǎn)發(fā)的,內(nèi)部有一個target屬性,定位更加精準,效率非常高;
  • NSProxy 跳過了消息轉(zhuǎn)發(fā)的流程, 即本類/父類 方法緩存和方法列表中遍歷查詢方法的過程, 直接調(diào)用方法簽名, 因此高效
  • NSProxy和NSObject是同一個級別的類,都是基類, NSproxy 沒有子類
  • 注意forwardingTargetForSelector此方法被注釋, 雖然使用它同樣也可以實現(xiàn)消息轉(zhuǎn)發(fā), 但是使用它同樣會走消息轉(zhuǎn)發(fā)流程, 因此不推薦
@interface NSProxy <NSObject> {
    __ptrauth_objc_isa_pointer Class    isa;
}

+ (id)alloc;// 注意區(qū)別nsobject沒有init方法
+ (id)allocWithZone:(nullable NSZone *)zone NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
+ (Class)class;

- (void)forwardInvocation:(NSInvocation *)invocation;
- (nullable NSMethodSignature *)methodSignatureForSelector:(SEL)sel NS_SWIFT_UNAVAILABLE("NSInvocation and related APIs not available");
- (void)dealloc;
- (void)finalize;
@property (readonly, copy) NSString *description;
@property (readonly, copy) NSString *debugDescription;
+ (BOOL)respondsToSelector:(SEL)aSelector;

- (BOOL)allowsWeakReference API_UNAVAILABLE(macos, ios, watchos, tvos);
- (BOOL)retainWeakReference API_UNAVAILABLE(macos, ios, watchos, tvos);

// - (id)forwardingTargetForSelector:(SEL)aSelector;

@end

正確的nspoxy實現(xiàn)方式, 使用方法簽名完成消息轉(zhuǎn)發(fā)

//消息轉(zhuǎn)發(fā)到target

//返回方法簽名
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [self.target methodSignatureForSelector:sel];
}

//內(nèi)部實現(xiàn)方法調(diào)用
- (void)forwardInvocation:(NSInvocation *)invocation
{
    [invocation invokeWithTarget:self.target];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 了解Runtime有助于我們理解Objective-C運行時系統(tǒng)的工作原理以及如何利用它。本章將介紹NSObjec...
    新生代農(nóng)民工No1閱讀 823評論 0 1
  • 《Effective Objective-C 2.0:編寫高質(zhì)量iOS與OS X代碼的52個有效方法》 在看這本書...
    monkey姜啦閱讀 1,538評論 0 3
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,041評論 0 9
  • 牛犢子們好,我是shark, 老規(guī)矩,上問題,搞懵逼你們 1: 咋滾動下UI定時器就不起效了?2: NSTime...
    諶文閱讀 930評論 0 0
  • 一、簡介 C++ 是基于靜態(tài)類型,而 Objective-C 是基于動態(tài)運行時類型。用 C++ 編寫的程序通過編譯...
    和風細羽閱讀 427評論 0 1

友情鏈接更多精彩內(nèi)容