iOS 基礎篇 強引用與弱引用

2022-06-02 07:36:07 字數 1254 閱讀 6620

(1)在這篇文章主要介紹了ios的強引用與弱引用的差別。

(2)在文章中使用案例介紹強引用與弱引用的使用環境。

(3)通過這篇文章我們能夠更加深入的了解強引用與弱引用的差別。

1.強引用與弱引用的差別。

(1)強應用和弱引用的關鍵字:strong weak

(2)我們都知道strong和weak的差別,但是要仔細看他們的差別到底在哪?

<1>首先我們要知道我們在建立物件的時候如果沒有特別說明的話我們預設的是strong強引用。

<2>強引用會持有物件,而弱引用不持有物件。

<3>**示例:

結果如下:

看到結果使我們想起了ios中的引用計數器,就是說強引用會持用物件,使得每次引用時引用計數器+1,當釋放一次只      是引用計數器減一,所以上圖物件object2不為null. 但是弱引用,引用計數器不會+1,所以上圖例子object3在釋放之後,這個物件引用計數器減為0,所以物件自動釋放了,所以苦逼的弱引用物件object4也為null.

2.強引用與弱引用的使用環境:

注:作為強引用我們最重要的是要注意不能讓他迴圈引用,否則會照成記憶體溢位

我們要注意的使用地方有:

(1)使用**的時候不能使用強引用,我們知道**物件是由外部銷毀的,而不是由**控制器本身進行銷毀的。

具體解釋:我們在乙個控制器(不一定是控制器,亦可以是view)中設定了**【我們將這個整體看做物件「object」吧】0.0,當我們在另乙個控制器(不一定是控制器)中建立這個物件的時候,在建立的過程中我們相當於對object所有宣告的物件進行了一次強引用,即(我們對object中的**進行了強引用),當我們宣告**時這時候就體現出我們weak弱引用的作用了,我們宣告**由於是弱引用,所以我們的引用計數器並不會+1,所以當我們釋放物件的時候不會出現記憶體洩漏!

(2)使用block的時候,當我們使用blick代替**的時候,block內部呼叫self時候要新增__weak來防止迴圈

引用照成的記憶體洩漏。我們使用物件在block在外邊宣告,在block塊內部發生改變時任然在其宣告的時候使用弱引用__weak

(3)其實nstimer在使用的時候也同樣會照成迴圈引用,所以我們要釋放nstimer物件的時候,我們要先呼叫

[timer invalidate];方法,在講起物件置為null

3.介紹一下strong和copy的區別

結果:copy 是將物件值拷貝乙份,然後自己建立乙個空間放進去,strong是將引用計數器+1,當物件空間的值發生改變時,指向這個空間的物件都會發生改變

弱符號與強符號,弱引用與強引用

對c c 而言,編譯器預設函式和初始化了的全域性變數為強符號。未初始化的全域性變數為弱符號。此處弱符號與強符號均是針對定義來說的,不是針對符號的引用。也可以通過gcc的 attribute weak 來定義任何乙個強符號為弱符號。cpp view plain copy extern in ext i...

iOS 強引用( strong)和弱引用(

我們在建立乙個新的物件時經常會這樣做 id obj1 nsobject alloc init 其實系統已經預設我們聲名的這個物件就是強引用型別的id strong obj1 nsobject alloc init 強引用會使物件的引用係數 1 這裡又牽扯到記憶體管理的一些相關問題,有不明白的可以先搜...

強引用,軟引用,弱引用

強引用 強引用設定為空,物件立馬會被 public class normalreference classm 軟引用 軟引用當引用存在的時候,只有當記憶體不足的時候才去 public class t0 softreference catch exception e system.out.printl...