[iOS]學習筆記3(動態性)


1. SEL和IMP

最早我把SEL理解為函數指針,現在看來,不是這樣的。

1.1 SEL類型

SEL類型的變量,可以通過@selector(方法名)來取得,當然了,Objective C的方法名,我們也知道了,多么惡心(比Java廢話還多)。

而它真正得到的,只要方法名一樣,它的值就是一樣的,不管這個方法定義於哪個類,是不是實例方法【再說了,@selector的時候,除了方法名也沒有什么類啊,對象啊什么事情】。

所以我現在把它理解為“方法名的某種映射結果”。(從C++程序員的眼光看,我覺得沒啥可以對應的,既不是函數指針,也不是函數指針類型,像是函數指針類型的名字吧。)

1.2 IMP類型

這個才是函數指針,IMP可以從 對象 & SEL的方法得到:

IMP imp = [self methodForSelector:selector];

這是IMP的定義:

typedef id (*IMP)(id, SEL, );

另外注意NSObject里面的這兩個方法:

- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;

 

2. Objective C可以動態添加方法...

class_addMethod,用就行了,轉到定義,可以看看其他的方法,也很動態(這也太動態了,Java,C#也不行啊)。

"定義於runtime.h"

 

3. resolveInstanceMethod

這個方法挺BT的。


我暫時個人理解為方法劫持吧,方法和屬性的調用,都會先跑到這里來,具體看文檔吧:
http://www.apple.com.cn/developer/mac/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/chapter_5_section_2.html

4. 模擬NSManagedObject


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM