![](/img/trans.png)
[英]how to override/swizzle a method of a private class in runtime objective-c?
[英]How to swizzle into completion block of an Objective-C method?
讓我們以這種方法為例:
+ (void)animateWithDuration:(NSTimeInterval)duration
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion
很簡單,就可以輕松地實現animatedWithDuration:animations:completion:
方法本身的不同或修改的實現。 如果我有興趣對完成模塊執行此操作怎么辦?
混亂是指修改類或對象元數據,以便為給定的選擇器調用不同的實現。 (這是一種非常脆弱且有些危險的技術,除非您非常了解自己在做什么,否則通常應在生產代碼中避免使用這種技術;如果確實如此,則無論如何都會避免使用它。當它崩潰時,它會令人眼花blow亂,並使代碼難以理解,但對調試和探索很有用。
塊是一個值。 它是一個函數文字,就像“ 1”是整數文字或@"string"
是字符串文字一樣。 沒有任何對象或類可以困擾。 如果要修改值,則必須修改值,就像修改示例中的持續時間一樣。
正如其他人指出的那樣,“混亂”用於指更改方法的實現,因此您使用了錯誤的術語,但這並不重要。
我猜您想做的是:將不同於調用方提供的塊傳遞給animatedWithDuration:animations:completion:
; 或將調用者提供的代碼塊包裝在您自己的代碼塊中-大致相同。
如果我的猜測是正確的,則可以使用一種方法來替換該方法,該方法將調用您選擇的原始傳遞塊,該方法可能是調用者提供的塊周圍的包裝。
高溫超導
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.