簡體   English   中英

課堂上的目標C和魔術方法

[英]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://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

這里還有一些值得注意的事情(第一次難倒我): http//iphonedevelopment.blogspot.com/2008/08/dynamically-adding-class-objects.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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