動(dòng)態(tài)語(yǔ)言(Dynamic Programming Language -動(dòng)態(tài)語(yǔ)言或動(dòng)態(tài)編程語(yǔ)言),是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu)。
動(dòng)態(tài)類(lèi)型語(yǔ)言(Dynamically Typed Language),所謂的動(dòng)態(tài)類(lèi)型語(yǔ)言,是指類(lèi)型的檢查是在運(yùn)行時(shí)做的。
Objective-C 可以通過(guò) Runtime 這個(gè)運(yùn)行時(shí)機(jī)制,在運(yùn)行時(shí)動(dòng)態(tài)的添加變量、方法、類(lèi)等,所以說(shuō)Objective-C 是一門(mén)動(dòng)態(tài)的語(yǔ)言。
1,給分類(lèi)添加屬性
objc_setAssociatedObject()
objc_getAssociatedObject()
2,Method Swizzling
method_exchangeImplementations
3,動(dòng)態(tài)繼承、交換
我們可以在運(yùn)行時(shí)創(chuàng)建新的class,這個(gè)特性用得不多,但其實(shí)它還是很強(qiáng)大的。你能通過(guò)它創(chuàng)建新的子類(lèi),并添加新的方法,如:Key Value Observing原理,isa指針的變換
4,消息轉(zhuǎn)發(fā)機(jī)制
forwardingTargetForSelector:
invokeWithTarget: