GeekBand——iOS第六期第二周學(xué)習(xí)筆記

一氓辣、 ?OC中的對象類型

OC中對于數(shù)據(jù)的處理都是采用將簡單的數(shù)據(jù)類型封裝成對象這種方式低剔,這和C語言就有很大的不同薛夜。

1.1 字符串類

? 在C語言中忌愚,我們知道沒有真正的字符串類型,一般是用數(shù)組去保存字符串却邓。但是在OC中硕糊,NSString這個類,用于對字符串進(jìn)行處理腊徙。

三種初始化方式:

1. 字面量初始化:?

NSString *str=@"hello world";

2. 初始化器方法:

NSString *str1=[[NSString alloc]initWithString:str];

NSString *str2=[[NSString alloc]initWithFormat:@"你好"];

3.工廠方法:

NSString *str3=[NSString stringWithFormat:@"大家好"];

不難發(fā)現(xiàn)NSString中存儲的是指針简十,其指向堆上的值。其實NSString已經(jīng)將字符封裝成了對象了撬腾。str不僅能調(diào)用堆上的值螟蝙,還能調(diào)用NSString類中的實例方法。

*在OC中NSString還有“共享機制”這種特殊的存儲規(guī)則民傻,其目的是減少內(nèi)存的使用胰默。其會將值想等的內(nèi)存共享給不同的對象。這樣做會引發(fā)幾條現(xiàn)象:

(1):有效減少內(nèi)存的占用漓踢;

(2):NSString中保存的值不會改變牵署。

?也就是說,當(dāng)使用工廠方法給 str賦新值的時候喧半,相當(dāng)于重寫賦予一個對象奴迅,而不是改變str指向的值。

如果要頻繁改變字符串的值挺据∪【撸可以使用NSMutableSring脖隶。其是NSString的子類。取消了共享機制暇检,并且增加了許多的類方法與實例方法方便開發(fā)者對值進(jìn)行操作产阱。

NSMutableString有一個特點需要注意,NSMutableString是動態(tài)的字符串块仆,其內(nèi)存大小在初始化后心墅,如果在使用中存儲的字符串超出了預(yù)定的內(nèi)存大小。NSMutableString將自動重寫分配一次內(nèi)存大小榨乎,其大小為原內(nèi)存的兩倍怎燥。重點是這種操作給予計算機的負(fù)擔(dān)特別大。會影響程序的效率蜜暑。

1.2 集合類

OC中有三種集合類铐姚。

NSArray類,是有序的數(shù)組肛捍。

NSSet類隐绵,是無序的集合類,并且不能存儲相同的集合元素拙毫。其規(guī)則和數(shù)學(xué)中的集合極為相似依许。

NSDictionary是鍵值對的存儲方式。

三種類均有對應(yīng)的Mutable子類缀蹄。

NSMutableArray超過預(yù)設(shè)的存儲大小峭跳,程序的效率會更低。這是因為在超過預(yù)定長度時缺前,編譯器會作三件事:(1) 分配新的堆內(nèi)存蛀醉,2倍于原內(nèi)存。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2) 將原來堆內(nèi)存上的元素拷貝到新內(nèi)存

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3) 釋放原來堆內(nèi)存

三種類都只能存儲對象衅码。如果要將簡單的數(shù)據(jù)類型存儲在集合中拯刁,必須封裝成類。

基本類型用NSNumber封裝逝段。結(jié)構(gòu)類型用NSValue封裝垛玻。

注意:三種集合類雖然具有長量性(長度和元素指針都不能更改)但是指針指向的對象內(nèi)部可以更改。

三種集合類的初始化方式和一些常用的類方法與實例方法就不在詳述奶躯。應(yīng)該自己下閱讀官方文檔帚桩,和進(jìn)行必要的練習(xí)。

內(nèi)存模型為:保存一個存儲在棧上的地址巫糙。這個地址指向堆上保存的所有對象的值地址朗儒。堆上的對象地址就是數(shù)組保存的值。

for in 是最快的內(nèi)存遍歷方法参淹!

二醉锄、ARC機制

? 是OC中的內(nèi)存管理機制,其作用相當(dāng)于Java中的垃圾回收機制浙值,但是和Java最大的不同是其是短時回收機制恳不,這就決定了OC跟適合運用于應(yīng)用軟件的開發(fā),而Java更適合做服務(wù)器的開發(fā)开呐。

ARC全稱為:Automatic Reference Counting(自動引用計數(shù)),ARC的出現(xiàn)將程序猿從繁復(fù)的內(nèi)存管理中解放出來⊙萄現(xiàn)在OC默認(rèn)開啟ARC。

ARC管理三種對象:1.OC對象指針筐付。2.Block指針卵惦。3.使用_attribute_((NSObject))定義的typedef

ARC不管理以下三種類型:1.值類型(簡單值類型,C語言struct)2.使用其它方式分配的堆對象(如使用malloc分配)3.非內(nèi)存資源

OC中當(dāng)ARC管理的對象引用計數(shù)為零的時候?qū)⒆詣颖会尫磐咂荩陆ㄒ粋€引用類型對象(alloc,new,copy)沮尿,引用計數(shù)將變?yōu)?,而以下四種操作將增加引用計數(shù):

(1) 將對象引用賦值給其它變量或常量较解。(2) 將對象已用賦值給其它屬性或?qū)嵗兞浚?)將對象傳遞給函數(shù)參數(shù)畜疾,或者返回值 (4)將對象加入集合中

以下四種操作將減少引用計數(shù):

(1)將局部變量或全局變量賦值為nil或其它值。(2) 將屬性賦值為nil或其它值印衔。 (3)實例屬性所在的對象被釋放啡捶。 (4)參數(shù)或局部變量離開函數(shù) (5) 將對象從集合中刪除

放于@AutoRelease Pool中的對象將會函數(shù)結(jié)束時自動釋放,@AutoRelease Pool可以嵌套使用奸焙,目的是創(chuàng)建大量對象后瞎暑,需要立即釋放。

三与帆、協(xié)議金顿、類別與擴展

3.1協(xié)議

在Xcode中Command+N,選擇Objective—C file,可以快速創(chuàng)建一個OC的協(xié)議鲤桥。

協(xié)議有如下特點:1.協(xié)議能繼承多個協(xié)議揍拆。2.協(xié)議只有.h文件,意味著茶凳,只能聲明方法和定義屬性嫂拴。并不能實現(xiàn)它們。3.一個類能同時遵守過個協(xié)議贮喧。

協(xié)議中默認(rèn)都是@require類型筒狠,其意味著這些屬性和方法必須在遵守協(xié)議的類中實現(xiàn)。但是寫在@optional下的屬性或方法可以選擇實現(xiàn)箱沦。

提示:可以用conformsToProtocol:檢查對象是否實現(xiàn)了協(xié)議辩恼。

以下協(xié)議是OC中經(jīng)常用到的官方協(xié)議,需要下來多學(xué)習(xí)與熟悉:

NSObject、NSCopying灶伊、NSMutableCopy疆前、NSFastEnumeration、NSCoding聘萨。

3.2 類別與擴展

類別和擴展都是為原有存在的類添加新的方法竹椒。但是兩者間有著較大的區(qū)別。

類別:能在不知道類的源文件的情況下為原有的類添加方法米辐,可以類方法也可以是實例方法胸完,但是不能添加成員變量和屬性。類別自身有獨立的.h和.m文件翘贮。并且能被子類繼承赊窥。命名規(guī)范為:類名+擴展名。類別有個功能是為特別大型的類進(jìn)行分割實現(xiàn)狸页。

擴展:必須知道類的源文件锨能。其沒有獨立的.h和.m文件。其接口和實現(xiàn)均寫在被擴展類的.m文件著肴捉,這意味著擴展中定義的實例變量和方法都是私有的腹侣。外部不能調(diào)用。只能在類內(nèi)中調(diào)用齿穗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傲隶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窃页,更是在濱河造成了極大的恐慌跺株,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脖卖,死亡現(xiàn)場離奇詭異乒省,居然都是意外死亡,警方通過查閱死者的電腦和手機畦木,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門袖扛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人十籍,你說我怎么就攤上這事蛆封。” “怎么了勾栗?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵惨篱,是天一觀的道長。 經(jīng)常有香客問我围俘,道長砸讳,這世上最難降的妖魔是什么琢融? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮簿寂,結(jié)果婚禮上漾抬,老公的妹妹穿的比我還像新娘。我一直安慰自己陶耍,他們只是感情好奋蔚,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布她混。 她就那樣靜靜地躺著烈钞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坤按。 梳的紋絲不亂的頭發(fā)上毯欣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音臭脓,去河邊找鬼酗钞。 笑死,一個胖子當(dāng)著我的面吹牛来累,可吹牛的內(nèi)容都是我干的砚作。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼嘹锁,長吁一口氣:“原來是場噩夢啊……” “哼葫录!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起领猾,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤米同,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后摔竿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體面粮,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年继低,在試婚紗的時候發(fā)現(xiàn)自己被綠了熬苍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡袁翁,死狀恐怖柴底,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梦裂,我是刑警寧澤似枕,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站年柠,受9級特大地震影響凿歼,放射性物質(zhì)發(fā)生泄漏褪迟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一答憔、第九天 我趴在偏房一處隱蔽的房頂上張望味赃。 院中可真熱鬧,春花似錦虐拓、人聲如沸心俗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽城榛。三九已至,卻和暖如春态兴,著一層夾襖步出監(jiān)牢的瞬間狠持,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工瞻润, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喘垂,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓绍撞,卻偏偏與公主長得像正勒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子傻铣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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