#import//不會(huì)重復(fù)引用頭文件基礎(chǔ)框架Foundation@interface, @implementationObjective-C C的超集OC被描述為蓋在C語言上的薄薄一層,OC的原意就是C語言主體上加入面向?qū)ο蟮奶匦韵鬟f承自Smalltalk,OC里,與其說對象互相調(diào)用方法,不如說對象之間互相傳遞消息。與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í)例(或者成員)變量聲明在被大括號包含的代碼塊中。+表示類方法,-表示實(shí)例方法。實(shí)現(xiàn)區(qū)塊則包含了公開方法的實(shí)現(xiàn),以及定義私有變量和方法OC創(chuàng)建對象需要通過alloc和init兩個(gè)消息,alloc的作用是分配內(nèi)存,init則是初始化對象。MyObject* my = [[MyObject alloc] init];在OC2.0中,若創(chuàng)建對象不需要參數(shù),可直接使用newMyObject* my = [MyObject new];方法屬性暴露實(shí)例變量的類,可以用屬性記號代替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中,可以對id(很像void*,但被嚴(yán)格限制只能用在對象上)發(fā)送任何消息,編譯器僅發(fā)出警告,可以編譯通過,而實(shí)際發(fā)生的事則取決于運(yùn)行期該對象的真正形態(tài),若該對象的確可以回應(yīng)消息,則依舊運(yùn)行對應(yīng)的方法。若無對應(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)的所有成員變量。
分類不僅可以增加類的方法,也可以替代原有的方法。
垃圾收集