ios開發(fā)weak ios開發(fā)webview失焦

iOS開發(fā)中的循環(huán)引用

修飾對(duì)象不會(huì)增加其引用計(jì)數(shù),避免了循環(huán)引用。 如果被修飾的對(duì)象在某一時(shí)機(jī)被釋放,會(huì)產(chǎn)生 懸垂指針 ,再通過(guò)這個(gè)指針去訪問原對(duì)象的話,會(huì)導(dǎo)致內(nèi)存泄露,所以一般不建議用,__unsafe_unretained去解除循環(huán)引用。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供萊西網(wǎng)站建設(shè)、萊西做網(wǎng)站、萊西網(wǎng)站設(shè)計(jì)、萊西網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、萊西企業(yè)網(wǎng)站模板建站服務(wù),十余年萊西做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

造成循環(huán)引用的原因,就是兩個(gè)及兩個(gè)以上的對(duì)象相互強(qiáng)引用,無(wú)法釋放。

在iOS開發(fā)中,循環(huán)引用常常發(fā)生在使用Block、Delegate和通知等機(jī)制時(shí)。為了避免循環(huán)引用,可以使用weak、strong和copy等關(guān)鍵字來(lái)修飾對(duì)象,明確表達(dá)對(duì)象之間的擁有關(guān)系。

循環(huán)引用是iOS開發(fā)中經(jīng)常遇到的問題,它指的是兩個(gè)或多個(gè)對(duì)象通過(guò)相互之間的強(qiáng)引用,形成了一個(gè)保留環(huán),即使已經(jīng)沒有外部對(duì)象持有,也無(wú)法對(duì)其進(jìn)行釋放操作,也無(wú)法釋放其占用的內(nèi)存空間(引用計(jì)數(shù)器始終大于0)。

iOS-底層原理26:weak原理

weak 是弱引用, 用weak來(lái)修飾、描述所引用對(duì)象的計(jì)數(shù)器并不會(huì)加1, 而且weak會(huì)在引用對(duì)象被釋放的時(shí)候自動(dòng)置為nil, 這也就避免了野指針訪問壞內(nèi)存而引起崩潰的情況,weak也可以解決循環(huán)引用。

weak是OC中用于打破對(duì)象間的循環(huán)引用的一種技術(shù)。 weak 修飾一個(gè)變量時(shí),表示該指針變量可以使用但不擁有該對(duì)象;及 weak 引用指向?qū)ο髸r(shí),對(duì)象的引用計(jì)數(shù)并不增加。

weak原理 Runtime 維護(hù)了一個(gè) weak表,用于存儲(chǔ)指向某個(gè)對(duì)象的所有weak指針。weak表 其實(shí)是一個(gè) hash(哈希)表,Key 是所指對(duì)象的地址,Value是 weak指針 的地址(這個(gè)地址的值是所指對(duì)象指針的地址)數(shù)組。

weak weak只能用來(lái)修飾對(duì)象,但是并不持有,引用計(jì)數(shù)不會(huì)+1。在Runtime中對(duì)該屬性進(jìn)行了操作,指向的內(nèi)存被釋放后(引用計(jì)數(shù)為0),指針就會(huì)自動(dòng)=nil,多用于避免循環(huán)引用的地方。

weak_table_t 是全局的弱引用表,將對(duì)象id存儲(chǔ)為鍵,將 weak_entry_t 存儲(chǔ)為它們的值。在我們的App中,多個(gè)對(duì)象會(huì)重用同一個(gè) SideTable 節(jié)點(diǎn),也就是說(shuō), weak_table 會(huì)存儲(chǔ)多個(gè)對(duì)象的弱引用信息。

關(guān)于iOS基本屬性修飾符的理解(weak篇)

1、assign assign主要用來(lái)修飾基本數(shù)據(jù)類型,例如int,float,NSInteger,CGFloat,儲(chǔ)存在棧中內(nèi)存不需要管理,一般不修飾對(duì)象,不然對(duì)象內(nèi)存地址被釋放,但是指針不會(huì)釋放就會(huì)造成野指針。

2、報(bào)錯(cuò)原因:如果我們用 weak 修飾,雖然進(jìn)行了賦值或者初始化操作,但是引用計(jì)數(shù)器是不會(huì)加一的,當(dāng)出了作用域,對(duì)象就會(huì)銷毀,指針置空,這樣我們所持有的屬性(對(duì)象)就是野指針。

3、weak_table_t 是全局的弱引用表,將對(duì)象id存儲(chǔ)為鍵,將 weak_entry_t 存儲(chǔ)為它們的值。在我們的App中,多個(gè)對(duì)象會(huì)重用同一個(gè) SideTable 節(jié)點(diǎn),也就是說(shuō), weak_table 會(huì)存儲(chǔ)多個(gè)對(duì)象的弱引用信息。

4、Weak+Controller是一種模式設(shè)計(jì)模式,簡(jiǎn)稱WC模式。主要用于分離組件操作邏輯和組件控制邏輯。其中Weak表示要訪問的操作邏輯組件,它不會(huì)調(diào)用任何其它的代碼。

5、__weak一般用在delegate關(guān)系中防止循環(huán)引用或者用來(lái)修飾指向由Interface Builder編輯與生成的UI控件。__autoreleasing 表示在autorelease pool中自動(dòng)釋放對(duì)象的引用,和MRC時(shí)代autorelease的用法相同。

6、讀寫性修飾符:readwrite readonlyreadwrite:表明這個(gè)屬性是可讀可寫的,系統(tǒng)為我們創(chuàng)建這個(gè)屬性的setter和getter方法。

本文標(biāo)題:ios開發(fā)weak ios開發(fā)webview失焦
網(wǎng)址分享:http://muchs.cn/article34/dgjoope.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、商城網(wǎng)站、App設(shè)計(jì)、服務(wù)器托管、建站公司、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)