內(nèi)存管理與自動引用計數(shù)學習 — 第五日

1.3.5 屬性

assign __unsafe_unretained

copy __strong(強引用對象的副本)

strong __strong

retain __strong

weak __weak

一個類的成員變量和屬性是同一類型

時死相,修飾符必須一致

1.3.6 數(shù)組

靜態(tài)數(shù)組超出其作用域時谋竖,數(shù)組中各個附有 __strong 修飾符的變量失效懈词,其強引用消失,所賦值的對象隨之釋放。

編譯器能夠根據(jù)靜態(tài)數(shù)組中的變量的作用域自動插入釋放賦值對象的代碼,而在動態(tài)數(shù)組中,編譯器不能確定數(shù)組的生存周期些膨,所以無從處理。所以一定要將 nil 賦值給所有元素分歇,使所有元素所賦值對象的強引用失效傀蓉,從而釋放那些對象。

1.3 完

1.4 ARC 實現(xiàn)

1.4.1 __strong 修飾符

本章講 __strong 修飾符在程序中是如何運行的职抡。

id __strong obj = [[NSObject alloc] init];

編譯器的模擬代碼如下

id obj = objc_msgSend(NSObject, @selecor(alloc));

objc_msgSend(obj, @selector(init));

調(diào)用兩次 objc_msgSend 方法葬燎,然后編譯器自動插入 objc_release 方法。然后對比其他獲取強引用的方法

id __strong obj = [NSMutableArray array];

編譯器模擬代碼

id obj = objc_msgSend(NSMutalbleArray, @selector(array));

objc_retainedAutoreleasedReturnedValue(obj);

objc_release(obj)

這個過程中調(diào)用了 objc_retainedAutoreleasedReturnedValue 方法缚甩,這個方法主要用于最優(yōu)化程序谱净。這個方法一般和 objc_autoreleasedReturnedValue 方法成對出現(xiàn)。

+? (id) array {

return [[NSObject alloc] init]擅威;

}

以下是模擬代碼

+? (id) array {

id obj = objc_msgSend(NSMutableArray, @selector(alloc));

objc_msgSend(obj, @selector(init));

return objc_autoreleaseReturndValue(obj);

}

objc_autoreleaseReturndValue方法執(zhí)行后會檢查調(diào)用方的執(zhí)行命令列表壕探,如果有 objc_retainedAutoreleasedReturnedValue 方法則會繞過 autoreleasepool 直接返回生成的對象

1.4.2 __weak 修飾符

__weak 的功能

a. 若附有 __weak 修飾符的變量所以用的對象廢棄,則將 nil 賦值給該變量郊丛。

b. 使用附有 __weak 修飾符的變量李请,即是使用注冊到 autoreleasepool 中的對象。

__weak a功能的實現(xiàn)

{

id __weak obj1 = obj;

}

模擬代碼{

id obj1;

objc_initWeak(&obj1, obj);

objc_destroyWeak(&obj1);

}

objc_initWeak 和 objc_destroyWeak 方法實際上是調(diào)用 objc_storeWeak 方法厉熟,上面的模擬代碼可以轉(zhuǎn)換為

{

id obj1;

obj1 = 0;

objc_store(&obj1, obj);

objc_store(&obj1, 0);

}

objc_store(&obj1, obj) 將 obj 的地址當做 key 第一參數(shù)即 weak 變量的地址注冊到 weak 表中导盅,當?shù)诙?shù)為0時將 weak 變量地址從 weak表中移除。

由于一個對象可以被多個weak變量引用揍瑟,所以白翻,weak表中一個對象可以注冊多個 weak 變量的地址。當對象廢棄時會首先從 weak 表中獲取引用記錄绢片,然后逐一賦值nil滤馍,過后從 weak 表中刪除該記錄岛琼,最后在引用計數(shù)表中刪除以廢棄對象為鍵值的記錄

__weak b功能的實現(xiàn)

{

id __weak obj1 = obj;

NSLog(@“%@”, obj1);

}

模擬代碼

id obj1;

objc_initWeak(&obj1, obj);

id temp = objc_loadWeakRetained(&obj1)

objc_autorelease(tmp);

NSLog(@“%@”, tmp);

objc_destroyWeak(&obj1);

1.4.3 __autorelease 修飾符?

1.4.4 retainCount

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巢株,隨后出現(xiàn)的幾起案子槐瑞,更是在濱河造成了極大的恐慌,老刑警劉巖纯续,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件随珠,死亡現(xiàn)場離奇詭異,居然都是意外死亡猬错,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門茸歧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倦炒,“玉大人,你說我怎么就攤上這事软瞎》昊剑” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵涤浇,是天一觀的道長鳖藕。 經(jīng)常有香客問我,道長只锭,這世上最難降的妖魔是什么著恩? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蜻展,結(jié)果婚禮上喉誊,老公的妹妹穿的比我還像新娘。我一直安慰自己纵顾,他們只是感情好伍茄,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著施逾,像睡著了一般敷矫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汉额,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天曹仗,我揣著相機與錄音,去河邊找鬼闷愤。 笑死整葡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的讥脐。 我是一名探鬼主播遭居,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啼器,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俱萍?” 一聲冷哼從身側(cè)響起端壳,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枪蘑,沒想到半個月后损谦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡岳颇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年照捡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片话侧。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栗精,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞻鹏,到底是詐尸還是另有隱情悲立,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布新博,位于F島的核電站薪夕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赫悄。R本人自食惡果不足惜原献,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涩蜘。 院中可真熱鬧嚼贡,春花似錦、人聲如沸同诫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽误窖。三九已至叮盘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霹俺,已是汗流浹背柔吼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丙唧,地道東北人愈魏。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親培漏。 傳聞我的和親對象是個殘疾皇子溪厘,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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

  • 1.1 什么是自動引用計數(shù) 概念:在 LLVM 編譯器中設(shè)置 ARC(Automaitc Reference Co...
    __silhouette閱讀 5,158評論 1 17
  • 自動引用計數(shù) 自動引用計數(shù):指內(nèi)存管理中對引用采取自動計數(shù)的技術(shù)畸悬。 內(nèi)存管理/引用計數(shù) 持有對象引起引用計數(shù)加...
    南京小伙閱讀 1,313評論 2 3
  • 我叫葉子,大名的簡稱珊佣,從大學時期被叫起來的名字 蹋宦,自己也很喜歡,一直持續(xù)到今日咒锻。故去的臺灣歌手阿桑有首歌就叫「葉子...
    葉子的spring閱讀 243評論 1 2
  • 月光冷冗,并不柔和, 似是一記重拳砸在我心里虫碉。 讓我回憶起贾惦, 從前的種種, 就像是敦捧, 死亡之前那樣。 雖然碰镜,我不曾死亡...
    瘋鬼閱讀 241評論 4 0
  • 最近在看Rxjava兢卵,寫了一個簡單的 demo整合了Rxjava +retrofit+mvp,寫完了迫不及待的分享...
    方志朋閱讀 1,337評論 0 12