日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转]iOS5 ARC学习笔记:strong、weak等详解

發(fā)布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]iOS5 ARC学习笔记:strong、weak等详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

iOS5中加入了新知識,就是ARC,其實我并不是很喜歡它,因為習(xí)慣了自己管理內(nèi)存。但是學(xué)習(xí)還是很有必要的。

在iOS開發(fā)過程中,屬性的定義往往與retain, assign, copy有關(guān),我想大家都很熟悉了,在此我也不介紹,網(wǎng)上有很多相關(guān)文章。

現(xiàn)在我們看看iOS5中新的關(guān)鍵字strong,?weak,?unsafe_unretained. 可以與以前的關(guān)鍵字對應(yīng)學(xué)習(xí)strong與retain類似,weak與unsafe_unretained功能差不多(有點區(qū)別,等下會介紹,這兩個新關(guān)鍵字與assign類似)。在iOS5中用這些新的關(guān)鍵字,就可以不用手動管理內(nèi)存了,從java等其它語言轉(zhuǎn)過來的程序員非常受用。

strong關(guān)鍵字與retain關(guān)似,用了它,引用計數(shù)自動+1,用實例更能說明一切

@property (nonatomic, strong) NSString *string1; @property (nonatomic, strong) NSString *string2;

有這樣兩個屬性

@synthesize string1; @synthesize string2;

猜一下下面代碼將輸出什么結(jié)果?

self.string1 = @"String 1"; self.string2 = self.string1; self.string1 = nil; NSLog(@"String 2 = %@", self.string2);

結(jié)果是:String 2 = String 1

由于string2是strong定義的屬性,所以引用計數(shù)+1,使得它們所指向的值都是@"String 1", 如果你對retain熟悉的話,這理解并不難。

接著我們來看weak關(guān)鍵字:

如果這樣聲明兩個屬性:

@property (nonatomic, strong) NSString *string1; @property (nonatomic, weak) NSString *string2;

并定義

@synthesize string1; @synthesize string2;

再來猜一下,下面輸出是什么?

self.string1 = [[NSString alloc] initWithUTF8String:"string 1"]; self.string2 = self.string1; self.string1 = nil; NSLog(@"String 2 = %@", self.string2);

結(jié)果是:String 2 = null

分析一下,由于self.string1與self.string2指向同一地址,且string2沒有retain內(nèi)存地址,而self.string1=nil釋放了內(nèi)存,所以string1為nil。聲明為weak的指針,指針指向的地址一旦被釋放,這些指針都將被賦值為nil。這樣的好處能有效的防止野指針。在c/c++開發(fā)過程中,為何大牛都說指針的空間釋放了后,都要將指針賦為NULL. 在這兒用weak關(guān)鍵字幫我們做了這一步。

接著我們來看unsafe_unretained

從名字可以看出,unretained且unsafe,由于是unretained所以與weak有點類似,但是它是unsafe的,什么是unsafe的呢,下面看實例。

如果這樣聲明兩個屬性:

并定義

@property (nonatomic, strong) NSString *string1; @property (nonatomic, unsafe_unretained) NSString *string2;

再來猜一下,下面的代碼會有什么結(jié)果?

self.string1 = [[NSString alloc] initWithUTF8String:"string 1"]; self.string2 = self.string1; self.string1 = nil; NSLog(@"String 2 = %@", self.string2);

請注意,在此我并沒有叫你猜會有什么輸出,因為根本不會有輸出,你的程序會crash掉。

原因是什么,其實就是野指針造成的,所以野指針是可怕的。為何會造成野指針呢?同于用unsafe_unretained聲明的指針,由于self.string1=nil已將內(nèi)存釋放掉了,但是string2并不知道已被釋放了,所以是野指針。然后訪問野指針的內(nèi)存就造成crash. ?所以盡量少用unsafe_unretained關(guān)鍵字。

轉(zhuǎn)載于:https://www.cnblogs.com/xsjayz/archive/2013/04/10/3012675.html

總結(jié)

以上是生活随笔為你收集整理的[转]iOS5 ARC学习笔记:strong、weak等详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品动漫3d一区二区三区免费版 | 国产欧美精品一区 | 女人被男人躁得好爽免费视频 | 精品视频区 | 亚洲综合激情网 | www视频在线免费观看 | 一个人在线观看www软件 | 精品深夜av无码一区二区老年 | 国产又粗又猛又爽视频 | 毛片视频播放 | 九色福利 | 日本999视频 | 国产美女精品视频国产 | 人人爽人人干 | 色婷婷av一区二区三区软件 | 黄色片视频在线观看 | 亚洲伦理影院 | 相亲对象是问题学生动漫免费观看 | 嫩草影院黄 | 苍井空浴缸大战猛男120分钟 | 成人做爰66片免费看网站 | 日本韩国欧美 | 日本性爱动漫 | 亚洲v国产v欧美v久久久久久 | 久青草国产在线 | 欧美人性生活视频 | 亚洲三级av | 久草成人在线 | 91丝袜在线 | 欧美一级网址 | 激情文学亚洲色图 | 久免费一级suv好看的国产 | 自拍偷拍三级 | 亚洲天堂手机版 | 国产三级在线播放 | 亚洲一区二区三区无码久久 | 国产精品18久久久久久vr下载 | 亚洲欧美综合在线观看 | 亚洲男人天堂久久 | 人人插人人干 | 久久98 | 日本精品久久久久中文字幕 | 国产一区久久久 | 免费在线观看一区二区 | 日本欧美另类 | 欧美日韩在线免费播放 | 少妇大叫太粗太大爽一区二区 | www.爱爱.com | av网在线播放 | 992tv成人免费视频 | 中文字幕99页 | 奇米影视色 | 国产一区二区三区久久 | 无码人妻精品中文字幕 | 国产精品高潮呻吟久久av野狼 | 绝顶高潮videos合集 | 老司机午夜福利视频 | 凹凸日日摸日日碰夜夜 | 雪白的扔子视频大全在线观看 | 欧美精品色视频 | av在线导航 | 国语对白自拍 | 亚洲精品777 | 亚洲一级片免费看 | 色撸撸在线观看 | 波多野结衣av在线观看 | av在线一区二区 | 日本欧美韩国国产精品 | 国产女人在线视频 | 色噜噜av | 亚洲影视网 | 欧美日韩一区二区区别是什么 | 中文字幕精品久久久 | 日本v片 | 伊人毛片 | 久久久久久久久久久综合 | 精品中文字幕av | 96日本xxxxxⅹxxx17 | 99精品视频一区二区三区 | 污视频网站入口 | 精品+无码+在线观看 | 日韩欧美黄 | 九九精品视频免费 | 香蕉综合网 | 一区二区www| 伦hdwww日本bbw另类 | 成人免费视频观看视频 | 国产熟妇乱xxxxx大屁股网 | 美女色黄网站 | 国产妇女馒头高清泬20p多 | 91原视频 | 91色区| 羞羞软件 | 亚洲精品久久久久久久蜜桃臀 | 操www| 国产无限制自拍 | 美女又爽又黄免费 | 黄91在线观看 | 91美女诱惑 |