#import//不會(huì)重復(fù)引用頭文件基礎(chǔ)框架Foundation@interface, @implementationObjective-C C的超集OC被描述為蓋在C語言上的薄薄一層绣夺,OC的原意就是C語言主體上加入面向?qū)ο蟮奶匦韵鬟f承自Smalltalk变擒,OC里哈打,與其說對(duì)象互相調(diào)用方法锦庸,不如說對(duì)象之間互相傳遞消息底桂。與C++不同,OC中類別與消息關(guān)系比較松散镜盯。所有消息處理直到運(yùn)行時(shí)才會(huì)動(dòng)態(tài)決定吗浩,字符串NSString類提供了字符串的類包裝,在字符串前加@来累,即為創(chuàng)建NSString類OC的類規(guī)格說明包含了兩個(gè)部分砚作,定義interface與實(shí)現(xiàn)implementation。類的實(shí)例(或者成員)變量聲明在被大括號(hào)包含的代碼塊中嘹锁。+表示類方法葫录,-表示實(shí)例方法。實(shí)現(xiàn)區(qū)塊則包含了公開方法的實(shí)現(xiàn)领猾,以及定義私有變量和方法OC創(chuàng)建對(duì)象需要通過alloc和init兩個(gè)消息米同,alloc的作用是分配內(nèi)存骇扇,init則是初始化對(duì)象。MyObject* my = [[MyObject alloc] init];在OC2.0中面粮,若創(chuàng)建對(duì)象不需要參數(shù)少孝,可直接使用newMyObject* my = [MyObject new];方法屬性暴露實(shí)例變量的類,可以用屬性記號(hào)代替getter和setter語法熬苍。@interface Person:NSObject{@publicNSString * name;@privateInt age;}@property(copy) NSString* name;@property(readonly) int age;-(id)initWithAge:(int)age;@end@synthesize,@dynamic快速枚舉For(Person* p in thePeople){}快速枚舉可以比標(biāo)準(zhǔn)枚舉產(chǎn)生更有效的代碼韭山。協(xié)議Protocol協(xié)議是一組沒有實(shí)現(xiàn)的方法列表,任何的類均可采納協(xié)議并具體實(shí)現(xiàn)這組方法冷溃。OC不支持多繼承兩種定義協(xié)議的方式钱磅,由編譯器保證的正式協(xié)議,以及為特定目的設(shè)定的非正式協(xié)議似枕。非正式協(xié)議為一個(gè)可選擇性實(shí)現(xiàn)的一系列方法列表盖淡,由于正式協(xié)議引入@optional關(guān)鍵字,非正式協(xié)議已經(jīng)廢棄一個(gè)類可以在不聲明匹配某個(gè)協(xié)議的情況下凿歼,實(shí)現(xiàn)該協(xié)議所包含的方法褪迟,也即實(shí)質(zhì)上匹配這個(gè)協(xié)議。@protocol Locking- (void)lock;- (void)unlock;@end@interface SomeClass:SomeSuperClass@end動(dòng)態(tài)類型在OC中答憔,可以對(duì)id(很像void*味赃,但被嚴(yán)格限制只能用在對(duì)象上)發(fā)送任何消息,編譯器僅發(fā)出警告虐拓,可以編譯通過心俗,而實(shí)際發(fā)生的事則取決于運(yùn)行期該對(duì)象的真正形態(tài),若該對(duì)象的確可以回應(yīng)消息蓉驹,則依舊運(yùn)行對(duì)應(yīng)的方法城榛。若無對(duì)應(yīng)消息,拋出例外态兴。-setMyValue:(id) foo;
轉(zhuǎn)發(fā)
轉(zhuǎn)發(fā)key用于簡化特定的設(shè)計(jì)模式狠持,例如觀測器模式或代理模式。
轉(zhuǎn)發(fā)方法
-(id)forward:(SEL) sel:(marg_list)args;
響應(yīng)方法
-(id)performv:(SEL) sel:(marg_list) args;
SEL類型是OC中消息的類型瞻润。
類別Category
一個(gè)分類可以將方法的實(shí)現(xiàn)分解進(jìn)一系列分離的文件中喘垂。程序員可以將一組相關(guān)的方法放進(jìn)一個(gè)分類,使程序更具可讀性绍撞。
分類中的方法是在運(yùn)行時(shí)被加入類中的正勒,這一特性允許程序員向現(xiàn)存的類中增加方法,而無需持有原有代碼楚午,或是重新編譯原有的類昭齐。
運(yùn)行時(shí),分類中的方法與類原有方法并無區(qū)別矾柜,其代碼可以訪問包括私有類成員變量在內(nèi)的所有成員變量阱驾。
分類不僅可以增加類的方法就谜,也可以替代原有的方法。
垃圾收集