OC-基礎(chǔ)

一、oc介紹

1轻猖、簡介

oc是一個成熟的谓罗,面向?qū)ο蟮恼Z言

oc是基于c之上的,擴展的c

oc是從Smalltalk【1】得到對象的方法及語法崎苗。所有的非面向?qū)ο蟮牟僮鳎òㄔ甲兞浚A(yù)處理舀寓,表達式胆数,函數(shù)聲明和函數(shù)調(diào)用)的語法和c語言相同,而面向?qū)ο蟮奶匦缘恼Z法是Smalltalk的消息機制互墓。

2必尼、調(diào)試器

調(diào)試時編程的最有創(chuàng)造性和治理挑戰(zhàn)的方面之一,他也是最費力的方面之一篡撵。由于調(diào)試是一個困難但卻關(guān)鍵的任務(wù)判莉,所以重要的是要學(xué)習(xí)調(diào)試的技巧。這些技巧中最重要的是讓計算機向您展示它在做什么育谬,這是debugging的關(guān)鍵券盅。

NSLog打印函數(shù):

? ? 例:NSLog(@"The current date and time is:%@",[NSDate date]);

格式控制符

例:

(1) int intValue = -100; ? ?NSInteger intValue2 = -999;

NSLog(@"int:%d,%d",intValue,intValue2);//int -100 -999

注:NSInteger is int type, not class!是基本數(shù)據(jù)類型的typedef,不是類膛檀。平臺不同锰镀,NSIntger對于的類型也不同】校跨平臺泳炉,可移植性

(2)unsigned int uintValue = 100; unsigned int uintValue2 = -100;

NSLog(@"unsigned int : %u %u",uintValue,uintValue2);//unsigned int:100 4294967196

(3)char aChar = 'G'; ?char bChar = 0x61; ?unichar aUnichar = Ox4f60;//unichar,兩個字節(jié)

NSLog(@"char:%c %c,unichar:%C",aChar,bChar,aUnichar);//char:G a, unichar:你);

(4)const unichar pUnichar[] = {L'你',L'好',0x0000};

NSLog(@"C string(unichar):%S",pUnichar);//

【1】Smalltalk和許多程序設(shè)計語言不同,它不僅僅是一門語言僵缺。它是一種面向?qū)ο蟮某绦蛟O(shè)計語言胡桃;一種程序設(shè)計環(huán)境;一個應(yīng)用開發(fā)環(huán)境(ADE)

3磕潮、C的擴展

在Objective-C中只要看到@符號翠胰,都可以把它看成是C語言的擴展

? ? Foundation框架處理的是用戶界面之下的層中的特性,例如數(shù)據(jù)結(jié)構(gòu)和通信機制自脯。 ? ? ? ? ? ? Foundation框架的頭文件占用了近1MB的磁盤存儲空間之景,包含一萬四千多行代碼,涵蓋一百多個文件膏潮。使用#import<Foundation/Foundation.h>包含主頭文件锻狗,就能夠獲得整個集合。也許你認為辛苦地讀取每個文件的全部文本會耗去編譯器很多時間,但是Xcode非常聰明:他會使用預(yù)編譯頭文件(一種經(jīng)過壓縮的轻纪、摘要形式的頭文件)油额,在通過#import導(dǎo)入這種文件時,加載速度會非晨讨悖快潦嘶。

? ? ?Cocoa對其所有函數(shù)、常量和類型名稱都添加了‘NS’前綴崇众。這個前綴告訴你函數(shù)來自Cocoa而不是其他工具包掂僵。【NS前綴->NeXTSoftware】顷歌。

讓xcode總是將警報作為錯誤來處理的方法

3.1布爾類型

Object-C的BOOL類型比C語言的bool類型早誕生十多年锰蓬。這兩種布爾類型可以在同一個程 序中共存,但在編寫Cocoa代碼時要使用BOOL眯漩。(說明:oc中的BOOL實際上是一種對帶符號的字符類型的定義芹扭,它使用8位存儲空間。YES定義為1赦抖,而NO定義為0冯勉。oc并不將BOOL作為僅能保存YES或NO值的真正的布爾類型來處理。編譯器獎BOOL認做8位二進制數(shù)摹芙,YES和NO值只是一種約定。這引發(fā)一個小問題:如果不小心將一個長于1字節(jié)的整型值(例如short或int值)賦給一個BOOL變量宛瞄,那么只有低位數(shù)字節(jié)會用作BOOL值浮禾。假設(shè)該地位字節(jié)剛好為0【例如8960,寫成十六進制為0x2300】份汗,BOOL值將會是0盈电,即NO值。

二杯活、面向?qū)ο缶幊袒A(chǔ)知識(OOP面向?qū)ο缶幊?Object-Oriented Programming)

1匆帚、類

oc定義了一個根類:NSObject,每一個新的類旁钧,應(yīng)該是一個NSObject類的子類吸重。它提供了一個系統(tǒng)運行時的大量方法。也就是說歪今,每一個對象的類型都是NSObject嚎幸,每一個指針指向?qū)ο蟮闹羔樁伎梢员宦暶鳛镹SObject*。事實上寄猩,我們可以使用id這個類型來代替嫉晶。這就是一個生命對象或指針的簡單方法,并且支持動態(tài)類型檢查來代替靜態(tài)類型檢查。

(1) 方法聲明:

mType (returnType) name1:(type1)param1 name2:(type2)param2...

方法需要參數(shù)時替废,方法名后要有冒號箍铭;冒號前面是標簽,冒號后面是參數(shù)類型和參數(shù)名

+類方法(C++靜態(tài)成員函數(shù))椎镣,用類名調(diào)用诈火;

-實例方法(C++非靜態(tài)成員函數(shù)),用對象名調(diào)用

static int sum = 5衣陶;//靜態(tài)全局變量

注:OC不支持靜態(tài)成員變量柄瑰,通過靜態(tài)全局變量來實現(xiàn)靜態(tài)成員變量功能

(2)類的實現(xiàn)

2、

@interface部分剪况,它用于定義類的公共接口教沾。

@implemention部分,使對象真正起作用的代碼位于@implementation部分中

注:Objective-C中不存在真正的私有方法译断,也無法把某個方法標示為私有方法授翻,從而禁止其他代碼調(diào)用它。這是Objective-C動態(tài)本質(zhì)的副作用孙咪。

實例化對象時堪唐,需要分配內(nèi)存,然后這些內(nèi)存被初始化并保存一些有用的默認值翎蹈,這些值不同于你在獲得新分配的內(nèi)存時得到的隨機值淮菠。內(nèi)存分配和初始化完成后,就創(chuàng)建了一個新的對象實例荤堪。

三合陵、繼承

說明:不要直接更改由繼承得到的實例變量的值。一定要使用方法來更改他們澄阳。

? ? 某些語言(例如C++)具有多繼承特性拥知,在這種情況下,一個類可以直接沖兩個或多個類繼承而來碎赢。但Objective-C不支持多繼承低剔,如果你嘗試在Objective-C中使用多繼承(多繼承的形式可能類似于以下語句),編譯器將不能識別他們:@interface Circle:NSObject,PrintableObject;你可以通過OC的其他特性獲取多繼承的優(yōu)點肮塞,例如分類和協(xié)議襟齿。

? ? 因為繼承在子類和超類之間建立了一種"is a"(是一個)關(guān)系,所以NSObject的實例變量稱為isa峦嗤。使用更具體種類的對象代替一般類型蕊唐,這種能力稱為多態(tài)性

? ? 每個方法調(diào)用都獲得了一個名為self的隱藏參數(shù)烁设,它是一個指向接收消息的對象的指針替梨。方法實用self參數(shù)查找它們要使用的實例變量钓试。

? ? OC提供某種方式來重寫方法,并且仍然調(diào)用超類的實現(xiàn)方式副瀑。當需要超類實現(xiàn)自身的功能弓熏,同時在前面貨后面執(zhí)行某些額外的工作時,這種機制非常有用糠睡。為了調(diào)用繼承方法的實現(xiàn)挽鞠,需要使用super作為方法調(diào)用的目標。

super既不是參數(shù)也不是實例變量狈孔,而是由OC編譯器提供的某種神奇功能信认。向super發(fā)送消息時,實際上是在請求OC向該類的超類發(fā)消息均抽。如果超類中沒有定義該消息嫁赏,OC將按照通常的方式在繼承鏈中繼續(xù)查找對應(yīng)的消息。

四油挥、復(fù)合

1潦蝇、什么是復(fù)合

? ? 編程中的復(fù)合就好像音樂中的作曲一樣:將多個組件組合在一起配合使用,從而得到完整的作品深寥。創(chuàng)作樂曲時攘乒,作曲人可能會選擇低音管聲部組成交響樂的二聲部。在OC中惋鹅,復(fù)合是通過包含作為實例變量的對象指針實現(xiàn)的则酝。嚴格地講,只有對象間的組合才能叫復(fù)合闰集。

2堤魁、存取方法

? ? 存取方法是用來讀取或改變對象特定屬性的方法。存取方法:setter方法返十,getter方法

? ? 說明:get這個詞在Cocoa中有著特殊的含義。如果get出現(xiàn)在cocoa的方法名稱中椭微,就意味著這個方法會通過你當做參數(shù)傳入的指針來返回數(shù)值洞坑。例如,NSData(cocoa中的類蝇率,創(chuàng)建可存儲任意字節(jié)序列的對象)中又一個getBytes:方法迟杂,它的參數(shù)就是用來存儲字節(jié)的內(nèi)存緩沖區(qū)的地址。

? ? 復(fù)合建立的是“has a”的(有一個)關(guān)系本慕。

五排拷、源文件組織

@class創(chuàng)建了一個前向引用。就是在告訴編譯器:“相信我锅尘,以后你會知道這個類到底是什么监氢,但是現(xiàn)在布蔗,你只需要知道這些±烁”如果有循環(huán)依賴關(guān)系纵揍,@class也很有用。即A類使用B類议街,B類也使用A類泽谨。如果試圖通過#import語句讓這兩個類互相引用,那么最后就會出現(xiàn)編譯錯誤特漩。但是如果在A.h中使用@class B吧雹,在B.h中使用@class A,那么這兩個類就可以相互引用了涂身。

? ? 如果它們是繼承自其他類而不是通過指針指向其他類雄卷,則不能在頭文件中使用@class語句。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末访得,一起剝皮案震驚了整個濱河市龙亲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悍抑,老刑警劉巖鳄炉,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搜骡,居然都是意外死亡拂盯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門记靡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈竿,“玉大人,你說我怎么就攤上這事摸吠】胀梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵寸痢,是天一觀的道長呀洲。 經(jīng)常有香客問我,道長啼止,這世上最難降的妖魔是什么道逗? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮献烦,結(jié)果婚禮上滓窍,老公的妹妹穿的比我還像新娘。我一直安慰自己巩那,他們只是感情好吏夯,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布此蜈。 她就那樣靜靜地躺著,像睡著了一般锦亦。 火紅的嫁衣襯著肌膚如雪舶替。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天杠园,我揣著相機與錄音顾瞪,去河邊找鬼。 笑死抛蚁,一個胖子當著我的面吹牛陈醒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞧甩,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼钉跷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肚逸?” 一聲冷哼從身側(cè)響起爷辙,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朦促,沒想到半個月后膝晾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡务冕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年血当,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禀忆。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡臊旭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箩退,到底是詐尸還是另有隱情离熏,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布戴涝,位于F島的核電站撤奸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喊括。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一矢棚、第九天 我趴在偏房一處隱蔽的房頂上張望郑什。 院中可真熱鬧,春花似錦蒲肋、人聲如沸蘑拯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽申窘。三九已至弯蚜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剃法,已是汗流浹背碎捺。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贷洲,地道東北人收厨。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像优构,于是被迫代替她去往敵國和親诵叁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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