簡體   English   中英

如何陷入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM