iOS assign,weak,strong等屬性和引用計數(shù)

先介紹指針相關(guān)的幾個概念(看有的書上介紹下面的未初始化的叫野指針,野指針叫懸空指針煮岁,可能和其它平臺理解有所差異凄硼,但是iOS這邊大家理解的應(yīng)該是下面介紹的這種,如有錯誤請幫忙指出尉间,謝謝!轉(zhuǎn)載請注明出處击罪,喜歡的話哲嘲,請點個贊吧!)

    1媳禁、未初始化指針眠副。eg:Person *a;
    2竣稽、空指針囱怕,沒有存儲任何內(nèi)存地址的指針就稱為空指針也就是nil霍弹,NULL。eg:Person *a = nil/NULL;(nil是OC對象類型的空指針娃弓,NULL是C類型的空指針)
    3典格、野指針,指向的對象內(nèi)存被釋放台丛,但是指針沒有讓其變?yōu)榭罩羔標=桑廊贿€指向那塊內(nèi)存,如果再向其發(fā)消息就會crash挽霉。eg:
        Person *a = [Person new]防嗡;
        [a release];
        [a setName:@"小明"]炼吴;
    /// 正確做法是在release后加一句 a = nil本鸣;舉例為了直觀方便使用了release方法代表
        Person *a = [Person new];
        [a release]硅蹦;
        a = nil;
        [a setName:@"小明"]荣德;
    /// 這樣最后一句向nil發(fā)消息雖然無效但是不會crash
    4、僵尸對象童芹,被釋放的對象比如上面的a所指向的對象執(zhí)行了release涮瞻,那么對象的內(nèi)存還未被重新分配的時候,這個對象其實還能被訪問因為內(nèi)存還存在假褪,這個時候就被稱之為僵尸對象署咽。
一、含義

1生音、assign
assign主要用來修飾基本數(shù)據(jù)類型宁否,例如int,float缀遍,NSInteger慕匠,CGFloat,儲存在棧中內(nèi)存不需要管理域醇,一般不修飾對象台谊,不然對象內(nèi)存地址被釋放,但是指針不會釋放就會造成野指針譬挚。
2锅铅、weak
weak只能用來修飾對象,但是并不持有减宣,引用計數(shù)不會+1盐须。在Runtime中對該屬性進行了操作,指向的內(nèi)存被釋放后(引用計數(shù)為0)漆腌,指針就會自動=nil丰歌,多用于避免循環(huán)引用的地方姨蟋。weak原理
3、strong立帖,retain
strong用來修飾對象并持有,引用計數(shù)會+1悠砚,正常情況指向的對象不會被銷毀晓勇,可以手動置為空指針來減少引用計數(shù),引用計數(shù)為0則銷毀對象灌旧,ARC下的strong相當于MRC下的retain(ARC用retain效果和strong一樣)绑咱。
4、copy
和strong類似枢泰,如果對象里面沒有支持NSCopying協(xié)議執(zhí)行copyWithZone方法描融,那和strong效果基本一樣,對象引用計數(shù)會+1衡蚂,不拷貝新的對象出來窿克。反之,copy所指向的是一個拷貝出來新的對象毛甲,引用計數(shù)為1年叮,多半用于修飾可變類型的不可變對象NSString,NSDictionary玻募,NSArray只损。copy之深淺拷貝詳解
5、unsafe_unretained
unsafe_retain類似weak一樣七咧,不過內(nèi)存如果被釋放了跃惫,指針依舊保存著之前的地址,變成野指針了艾栋,訪問就會crash爆存,所以他是不安全的。

image.png

6裹粤、__autoreleasing
在 ARC 模式下终蒂,我們不能顯示的使用 autorelease 方法了,但是 autorelease 的機制還是有效的遥诉,通過將對象賦給 __autoreleasing 修飾的變量就能達到在 MRC 模式下調(diào)用對象的 autorelease 方法同樣的效果拇泣。__autoreleasing 修飾的對象會被注冊到 Autorelease Pool 中,并在 Autorelease Pool 銷毀時被釋放矮锈。
注意:定義 property 時不能使用這個修飾符霉翔,因為任何一個對象的 property 都不應(yīng)該是 autorelease 類型的。__autoreleasing 詳解-文章還未寫

二苞笨、代碼解釋
image.png

image.png

image.png

image.png

總結(jié)
1债朵、weak后student引用計數(shù) = 1
2子眶、strong后student引用計數(shù)+1 = 2
3、retain后student引用計數(shù)+1 = 3
4序芦、copy后student引用計數(shù)+1 = 4 // 沒有實現(xiàn)copyWithZone方法臭杰,不然引用計數(shù)不變還是3,但是cyStu所指向的對象不是student了谚中。

最后編輯于
?著作權(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)容