引用:在oc中引用分爲弱引用和強引用,
- 弱引用:弱引用是沒有對象的絕對使用權,也沒有使對象的計數器進行加1操作,在引用的對象被釋放的時候,它是無能爲力的,
- 弱引用關鍵字:__weak 在對象被釋放的時候 會自動的把指針置爲nil,保證了程序的優良性;__unsafe_unretained:在對象釋放的時候,不會把只想對象的弱引用指針置爲nil,從而使得指針成爲野指針,若再次調用該指針,會使程序發生莫名其妙的變化從而是程序崩潰,故不建議使用;
- 強引用:強引用擁有對象的絕對使用權,使得對象的指針計數器加1,通常情況下在強引用指針沒有對對象進行釋放的時候,指針對象是不會被程序銷燬的。
- 強引用的關鍵字:__strong 用來修飾變量,strong等同retain
指針:內存中的一個變量,其內部存儲的是一個變量或對象的地址,同時指針也不關心它所指向的地址的內容如何變化。
指針和引用的區別:
1.從現象上看:指針在運行時可以改變其所指向的值,而引用一旦和對象綁定後就不再改變,引用訪問是直接訪問,而指針是間接訪問。
2.從內存上看:程序爲指針變量分配空間,而引用不分配
3.在遍以上:在程序編譯過程中,都要被添加到符號表上,指針變量在符號表上記錄的是指針變量的地址值,而醫用記錄的是引用的對象的地址值。符號表一旦生成就不會改變。所以指針可以改變指向的對象(指針變量的值可以改變)而引用不行