(GeekBand第一周)Object C編程語言

Object-C簡介

1980年代由Brad Cox和Tim Love發(fā)明蒋川。OC較C語言基礎(chǔ)上做了面向?qū)ο蟮幕A(chǔ),它是蘋果Mac OS系統(tǒng)開發(fā)的首選語言尖滚,具有面向?qū)ο蟮刀诤闲院茫∣C為C的超集,無需重新開發(fā)即可使用Cocoa軟件框架)薪夕,動態(tài)機(jī)制支持等特性脚草。

作為一名開發(fā)者,開發(fā)中需具有底層思維與抽象思維(具體如下)


Object-C具有兩種開發(fā)方式:

1.Clang或GCC命令行方式原献,這種方式適合調(diào)試馏慨、研究與微觀調(diào)查。

2.Xcode項目姑隅,即通過Xcode建立項目写隶,該方法使用大型框架,追求設(shè)計質(zhì)量與代碼組織粤策。

Object-C編譯過程如下:


Object-C的類與對象

OC類型系統(tǒng)分為引用類型(類class樟澜,指針pointer和塊block),值類型(基礎(chǔ)數(shù)值,結(jié)構(gòu)與枚舉)和類型裝飾秩贰。

類為一種引用類型霹俺,它由棧上指針(指向?qū)?yīng)內(nèi)容)與存儲在堆上的內(nèi)容組成。其內(nèi)存圖如下:


結(jié)構(gòu)是一種值類型毒费,其實例直接存儲與棧上丙唧,參考內(nèi)存圖如下:


如上利用內(nèi)存圖有助于理解類與結(jié)構(gòu)。

補(bǔ)充:棧(stack)與堆(heap)
棧是存儲值類型觅玻,無ARC負(fù)擔(dān)想际,系統(tǒng)自動管理,空間大小編譯時確定(參數(shù)與局部變量)溪厘,函數(shù)執(zhí)行前自動分配胡本,函數(shù)結(jié)束后自動收回,函數(shù)之間通過拷貝值傳遞畸悬。

而堆是一種存儲引用類型對象侧甫,與棧相比,其分配由開發(fā)者創(chuàng)建對象時手動分配蹋宦,釋放由運(yùn)行時ARC機(jī)制自動釋放披粟,函數(shù)之間傳遞則是由拷貝引用即指針傳遞,具有全局性冷冗。較棧自由守屉,但可能發(fā)生內(nèi)存泄漏的問題。

數(shù)據(jù)成員:屬性與實例變量

屬性表達(dá)實例狀態(tài)蒿辙,描述類型對外接口拇泛。

默認(rèn)情況下,系統(tǒng)會為屬性定義@property自動生成setter(setPropertyName)與getter(propertyname)訪問器方法(無需聲明即可調(diào)用须板,如self.x)碰镜,還會自動生成相應(yīng)的實例變量(_propertyname)兢卵。

補(bǔ)充:類外一律使用屬性來訪問(如property.x)习瑰,類內(nèi)一般也用self使用屬性來訪問。僅有init秽荤,dealloc與自定義訪問器方法里用實例變量訪問甜奄。

屬性的描述特性:

讀寫特性:readwrite(默認(rèn),無需定義時特別寫出)與readonly(只讀)窃款。

多線程特性:原子性與非原子性课兄。

內(nèi)存管理特性:ARC環(huán)境下,強(qiáng)引用strong(默認(rèn))晨继,弱引用weak(有時可避免一些循環(huán)引用)和拷貝屬性copy創(chuàng)建獨(dú)立拷貝(避免賦值改變時對原引用對象的改變)烟阐。

函數(shù)成員:方法

函數(shù)指分為全局函數(shù)即屬于C語言函數(shù)(需在main函數(shù)運(yùn)行前前置聲明)和成員函數(shù)即屬于ObjC。

方法是類的成員函數(shù),表達(dá)實例行為或類型行為(默認(rèn)均為公有蜒茄,無私有和受限的方法)唉擂。方法調(diào)用通過運(yùn)行時動態(tài)消息分發(fā)實現(xiàn)。

方法又可分為實例方法和類型方法檀葛。

實例方法-表達(dá)實例行為玩祟,可以訪問實例成員(實例屬性、實例變量屿聋、實例方法)空扎。

實例方法一般以:-(返回值類型)方法名 ? ?這種方式聲明定義(如-(void)say)∪蠹ィ可以在實例方法中調(diào)用實例方法转锈。

類方法,表達(dá)類型行為楚殿,訪問權(quán)限:可以訪問類型方法和靜態(tài)變量黑忱,不能訪問實例成員。聲明時往往通過 ? ?+(返回值類型)名稱勒魔。不能再方法中調(diào)用實例方法甫煞。

補(bǔ)充說明:方法參數(shù)有值類型或指針類型。方法可以無參數(shù)也可無返回值(如-(void)say)冠绢。方法有參數(shù)抚吠,方法名約定包含第一個參數(shù)名,第二個參數(shù)名需要顯式提供外部參數(shù)名弟胀,例如 -(void)initWithX:(int)x withY:(init)y楷力。最后看看方法動態(tài)調(diào)用機(jī)制。



初始化器與析構(gòu)器dealloc

初始化器用于初始化對象實例或者類型孵户,即其分為對象初始化器(-(id)init)和類型初始化器(+(void)initialize)萧朝。

初始化對象實例時(調(diào)用時),init常和alloc搭配使用夏哭。例如:NSString* p1=[[NSString alloc]init]检柬。

alloc主要做:在堆上分配合適大小的內(nèi)存,將屬性和實例變量的內(nèi)存置0竖配。

init做的則是調(diào)用父類初始化器和初始化當(dāng)前實例變量何址。需要注意的是初始化中盡量使用實例變量,不要使用屬性进胯。

也可以使用new(相當(dāng)于無參型alloc/init)初始化用爪。例如[p1 new]

補(bǔ)充:類型初始化器(+(void)initialize)負(fù)責(zé)類型級別的初始化,在類使用前被系統(tǒng)自動調(diào)用胁镐,在每個進(jìn)程周期中只調(diào)用一次偎血。

dealloc主要負(fù)責(zé)釋放對象擁有的動態(tài)資源诸衔,其實現(xiàn)下面功能:

需要注意dealloc是根據(jù)ARC對象引用計數(shù)原則,釋放對象內(nèi)存前自動調(diào)用颇玷,無法手工調(diào)用署隘。

繼承與多態(tài)

繼承是類中的一個重要的特性, 他的出現(xiàn)使得我們沒必要寫重復(fù)的代碼亚隙; 可重用性高磁餐。首先指定一個父類,在子類聲明中引用父類阿弃,這樣子類便自動繼承了父類中的實例變量诊霹,實例方法,屬性和類方法渣淳。其內(nèi)存模型大致如下:

多態(tài)是子類在父類統(tǒng)一行為接口下脾还,表現(xiàn)不同的實現(xiàn)形式(子類方法進(jìn)行了重寫)。下面例子即是一個典型多態(tài)(Shape為父類入愧,Rectangle是子類)鄙漏。

Shape *rect = [[Rectangle alloc]init];

rect.no=200;

rect->_data++;

[rect draw];?

[rect print];

[Rectangle process];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棺蛛,隨后出現(xiàn)的幾起案子怔蚌,更是在濱河造成了極大的恐慌,老刑警劉巖旁赊,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桦踊,死亡現(xiàn)場離奇詭異,居然都是意外死亡终畅,警方通過查閱死者的電腦和手機(jī)籍胯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离福,“玉大人杖狼,你說我怎么就攤上這事⊙” “怎么了蝶涩?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赠涮。 經(jīng)常有香客問我子寓,道長暗挑,這世上最難降的妖魔是什么笋除? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮炸裆,結(jié)果婚禮上垃它,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好国拇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布洛史。 她就那樣靜靜地躺著,像睡著了一般酱吝。 火紅的嫁衣襯著肌膚如雪也殖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天务热,我揣著相機(jī)與錄音忆嗜,去河邊找鬼。 笑死崎岂,一個胖子當(dāng)著我的面吹牛捆毫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冲甘,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼绩卤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了江醇?” 一聲冷哼從身側(cè)響起濒憋,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陶夜,沒想到半個月后跋炕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡律适,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年辐烂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捂贿。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡纠修,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厂僧,到底是詐尸還是另有隱情扣草,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布颜屠,位于F島的核電站辰妙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏甫窟。R本人自食惡果不足惜密浑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粗井。 院中可真熱鬧尔破,春花似錦街图、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胆剧,卻和暖如春絮姆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秩霍。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工滚朵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人前域。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓辕近,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匿垄。 傳聞我的和親對象是個殘疾皇子移宅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容