[英]Objective C and magic methods in class
objective-c是否提供了一種攔截對不存在的類方法的調用的方法?
forwardInvocation
方法是您要使用的方法。 在對象上調用不存在的選擇器時會自動調用它。 此方法的默認行為是調用doesNotRecognizeSelector:
這是將調試信息輸出到控制台的內容),但您可以覆蓋它執行任何操作。 Apple推薦的一種方法是讓此方法將方法調用轉發給另一個對象。
- (void)forwardInvocation:(NSInvocation *)anInvocation
請注意, forwardInvocation
是一個相當昂貴的操作。 NSInvocation對象需要由框架創建,並且(可選)用於在另一個實例上調用選擇器。 如果您正在尋找一種(相對)更快的方法來檢測不存在的選擇器,那么您可以選擇實現forwardingTargetForSelector
。
- (id)forwardingTargetForSelector:(SEL)aSelector
你應該有Apple如何有效地覆蓋這些方法的文檔 ,還有一些需要注意的問題,特別是在同一個對象上覆蓋forwardInvocation
方法時會有缺少的選擇器。
是的,您可以使用resolveClassMethod:類方法(在NSObject上定義):
這里還有一些值得注意的事情(第一次難倒我): http : //iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.