2鼻由、內(nèi)存管理機(jī)制

好的文章:
一寇仓、內(nèi)存管理機(jī)制
二、atomic 和nonatomic的區(qū)別(性能器联、加鎖)

strong :強(qiáng)引用二汛,ARC中使用,與MRC中retain類似主籍,使用之后习贫,計(jì)數(shù)器+1。
weak :弱引用 千元,ARC中使用苫昌,如果只想的對(duì)象被釋放了,其指向nil幸海,可以有效的避免野指針祟身,其引用計(jì)數(shù)為1奥务。
readwrite : 可讀可寫特性,需要生成getter方法和setter方法時(shí)使用袜硫。
readonly : 只讀特性氯葬,只會(huì)生成getter方法 不會(huì)生成setter方法,不希望屬性在類外改變婉陷。
assign :賦值特性帚称,不涉及引用計(jì)數(shù),弱引用秽澳,setter方法將傳入?yún)?shù)賦值給實(shí)例變量闯睹,僅設(shè)置變量時(shí)使用。
retain :表示持有特性担神,setter方法將傳入?yún)?shù)先保留楼吃,再賦值,傳入?yún)?shù)的retaincount會(huì)+1妄讯。
copy :表示拷貝特性孩锡,setter方法將傳入對(duì)象復(fù)制一份,需要完全一份新的變量時(shí)亥贸。
nonatomic :非原子操作躬窜,不加同步,多線程訪問可提高性能砌函,但是線程不安全的斩披。決定編譯器生成的setter getter是否是原子操作。
atomic :原子操作讹俊,同步的垦沉,表示多線程安全,與nonatomic相反仍劈。

注意:
1厕倍、atomic關(guān)鍵字修飾屬性的性能要比nonatomic關(guān)鍵字修飾屬性的性能要低。所以通常在iOS開發(fā)中贩疙,定義屬性使用nonatomic讹弯。目的就是為了提高性能,節(jié)省可憐的資源这溅。

2组民、為什么atomic關(guān)鍵字修飾的屬性性能會(huì)低呢?

因?yàn)閍tomic底層有加鎖的操作悲靴,無論是什么鎖內(nèi)存都會(huì)有一定的開銷臭胜,性能肯定會(huì)比nonatomic低。

當(dāng)定義一個(gè)屬性之后,編譯器會(huì)為自動(dòng)為我們生成帶_(下劃線)的成員變量以及getter/setter方法耸三, 如果使用atomic修飾屬性乱陡,那么在編譯器為我們生成setter/getter方法的時(shí)候,會(huì)做加鎖的操作仪壮,加鎖的目的就是為了保證存取值的安全性/完整性憨颠。看場(chǎng)景一

場(chǎng)景一:A線程积锅、B線程

如果使用atomic修飾屬性值爽彤,有A和B兩個(gè)線程,A線程對(duì)屬性進(jìn)行賦值乏沸,當(dāng)A線程賦值進(jìn)行一半的時(shí)候淫茵,由于加鎖的緣故,A線程會(huì)持有這把鎖蹬跃,當(dāng)B線程進(jìn)行取值操作時(shí)候,發(fā)現(xiàn)A線程持有鎖铆铆,那么會(huì)進(jìn)行等待蝶缀,當(dāng)A線程賦值操作結(jié)束后,會(huì)放開鎖薄货,那么B線程持有這把鎖翁都,所以可以保證B線程一定可以取到一個(gè)完整的值。

如果使用nonatomic修飾屬性值谅猾,有A和B兩個(gè)線程柄慰,A線程對(duì)屬性進(jìn)行賦值,當(dāng)A線程賦值進(jìn)行一半的時(shí)候税娜,B線程進(jìn)行取值操作坐搔,由于沒有加鎖,B線程取不到一個(gè)完整的值敬矩,拿到一個(gè)不完整的值去做一些操作就可能會(huì)發(fā)生意想不到的事情概行。

但是atomic并不能保證線程是安全的,看場(chǎng)景二

場(chǎng)景二:A線程弧岳、B線程凳忙、C線程

使用atomic修飾屬性,如果有A禽炬、B和C三個(gè)線程涧卵。其中A和B線程同時(shí)對(duì)一個(gè)屬性進(jìn)行賦值操作,當(dāng)賦值一半的時(shí)候腹尖,C線程進(jìn)行取值操作柳恐,那么可以保證C線程一定可以取到一個(gè)完整的值,但是這個(gè)值的內(nèi)容可能是A線程賦的值,也可能是B線程賦的值胎撤,也可能是原始值晓殊,雖然取得了完整的值,但是這個(gè)值不一定是程序員想要的伤提,所以說atomic并不是線程安全的巫俺。

總結(jié):在平時(shí)開發(fā)的時(shí)候,不涉及線程安全的時(shí)候肿男,比如一些UI控件必須在主線程操作的介汹,用nonatomic可以提高性能。而真正要涉及線程安全舶沛,不能只靠編譯器嘹承,需要程序員自己控制。

僵尸對(duì)象如庭、野指針與空指針

1叹卷、僵尸對(duì)象: 所占用的內(nèi)存已經(jīng)被回收的對(duì)象叫僵尸對(duì)象,
注意:僵尸對(duì)象不能再使用
2坪它、野指針: 指向僵尸對(duì)象的指針叫野指針
注意:給野指針發(fā)送消息會(huì)報(bào)錯(cuò)EXC_BAD_ACCESS錯(cuò)誤:訪問了一塊已經(jīng)被回收的內(nèi)存
3骤竹、空指針: 沒有指向任何對(duì)象的指針(存儲(chǔ)的東西是nil,NULL,0)。
注意:給空指針發(fā)送消息不會(huì)報(bào)錯(cuò),系統(tǒng)什么也不會(huì)做,所以在對(duì)象被釋放時(shí)將指針設(shè)置為nil可以避免野指針錯(cuò)誤

注: 默認(rèn)情況下,Xcode是不會(huì)監(jiān)聽僵尸對(duì)象的,所以需要我們自己手動(dòng)開啟,開啟監(jiān)聽僵尸對(duì)象步驟為: Edit Scheme ->; Run ->; Diagnostics ->; Objective-C的Enable Zombie Objects打鉤,這樣便可以在因?yàn)榻┦瑢?duì)象報(bào)錯(cuò)的時(shí)候給出更多錯(cuò)誤信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末往毡,一起剝皮案震驚了整個(gè)濱河市蒙揣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌开瞭,老刑警劉巖懒震,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嗤详,居然都是意外死亡个扰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門断楷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锨匆,“玉大人,你說我怎么就攤上這事冬筒】致啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵舞痰,是天一觀的道長(zhǎng)土榴。 經(jīng)常有香客問我,道長(zhǎng)响牛,這世上最難降的妖魔是什么玷禽? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任赫段,我火速辦了婚禮,結(jié)果婚禮上矢赁,老公的妹妹穿的比我還像新娘糯笙。我一直安慰自己,他們只是感情好撩银,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布给涕。 她就那樣靜靜地躺著,像睡著了一般额获。 火紅的嫁衣襯著肌膚如雪够庙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天抄邀,我揣著相機(jī)與錄音耘眨,去河邊找鬼。 笑死境肾,一個(gè)胖子當(dāng)著我的面吹牛剔难,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奥喻,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼钥飞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了衫嵌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤彻秆,失蹤者是張志新(化名)和其女友劉穎楔绞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唇兑,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酒朵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扎附。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔫耽。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖留夜,靈堂內(nèi)的尸體忽然破棺而出匙铡,到底是詐尸還是另有隱情,我是刑警寧澤碍粥,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布鳖眼,位于F島的核電站,受9級(jí)特大地震影響嚼摩,放射性物質(zhì)發(fā)生泄漏钦讳。R本人自食惡果不足惜矿瘦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愿卒。 院中可真熱鬧缚去,春花似錦、人聲如沸琼开。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稠通。三九已至衬衬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間改橘,已是汗流浹背滋尉。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞主,地道東北人狮惜。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像碌识,于是被迫代替她去往敵國和親碾篡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 1.內(nèi)存的創(chuàng)建和釋放讓我們以O(shè)bject-c世界中最最簡(jiǎn)單的申請(qǐng)內(nèi)存方式展開筏餐,談?wù)勱P(guān)于一個(gè)對(duì)象的生命周期开泽。首先創(chuàng)建...
    年輕皆浮云閱讀 272評(píng)論 0 0
  • 手機(jī)平臺(tái)不同于計(jì)算機(jī),由于手機(jī)硬件的局限性魁瞪,如果不好好管理內(nèi)存穆律,會(huì)出現(xiàn)很多問題的! http://www.jian...
    js_2013閱讀 821評(píng)論 0 3
  • 軟件運(yùn)行時(shí)會(huì)分配和使用設(shè)備的內(nèi)存資源导俘,因此峦耘,在軟件開發(fā)的過程中,需要進(jìn)行內(nèi)存管理旅薄,以保證高效辅髓、快速的分配內(nèi)存,并且...
    Lonely__M閱讀 18,471評(píng)論 7 57
  • 原文地址:http://www.reibang.com/p/66b5d43b6ac4 軟件運(yùn)行時(shí)會(huì)分配和使用設(shè)備的...
    JinSanPang閱讀 640評(píng)論 0 5
  • assign 賦值方式 不復(fù)制不保留少梁,直接賦值 基本數(shù)據(jù)類型和本類不直接擁有的對(duì)象 對(duì)象應(yīng)用strong 卻用 ...
    無悔zero閱讀 250評(píng)論 0 0