指針,以及strong、weak指針

很久沒有仔細再去思考指針的問題過了,今天突然想起,問一下自己,什么是指針呢?忽而發(fā)現(xiàn)不太清楚,忘記了。所以再次在這里溫習一下指針的概念以及強弱指針的問題。

1.指針

什么是指針?簡單的來說就是保存變量地址值的變量,通過指針可以直接操作內(nèi)存,所以在oc中要注意內(nèi)存管理,因而出現(xiàn)了MRC、ARC。通過下面的代碼我們首先來熟悉一下oc中指針的用法:

        int a = 3;
        int *b = NULL;
        b = &a;
        
        NSLog(@"%zd, %zd", a, *b);

這里的a變量是基本數(shù)據(jù)類型變量,而b變量是基本數(shù)據(jù)類型的指針變量,在oc中指針變量存放的一定是地址,所以

        int *b = a

這種寫法在oc中是會發(fā)生警告(編譯)的,運行時是會報錯的,a是基本數(shù)據(jù)類型,返回的是值而不是地址,編譯器不會認可,而oc對象而是允許的,也是必須的。

        int a = 3;
        int *b = &a;
        
        int **c = NULL;
        c = &b;
        NSLog(@"%zd, %zd, %zd", a, *b, **c);

同上,這也是一樣,基本數(shù)據(jù)類似返回的是值,而oc中指針只能存放基本數(shù)據(jù)類型的地址。

2.strong、weak指針

在oc中由于所有的對象都是需要指針來獲取的,所以會出現(xiàn)內(nèi)存溢出、內(nèi)存異常、內(nèi)存警告的問題,所以在MRC中,我們需要手動的進行內(nèi)存管理,然而在ARC相對而言就管理的少一些了,但是也并不是說就不需要我們進行監(jiān)控了,再不用到的對象,我們要及時置空(nil),因而就出現(xiàn)了strong、weak了,這在老版本中相當于retain、assign。在ARC中,只要有一個對象還被strong指針所指,就不會被釋放,而weak則沒有,weak指針所指的對象,如果沒有其他strong指針所指則會在創(chuàng)建時,就會被釋放,weak指針的作用是為了防止循環(huán)引用,如delegate、block,在ARC中weak指針的運用也是很好的內(nèi)存管理。

更加詳細的內(nèi)容,參考M了個J老師的文章:

strong、weak指針
http://blog.csdn.net/q199109106q/article/details/8565017

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.1 什么是自動引用計數(shù) 概念:在 LLVM 編譯器中設(shè)置 ARC(Automaitc Reference Co...
    __silhouette閱讀 5,478評論 1 17
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 2,253評論 0 7
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,844評論 0 4
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,128評論 0 12
  • 第二 小學時候,我的學習成績還是不錯的,特別是數(shù)學,幾乎都是我第一個交課堂作業(yè)。那時候還有同學抄我的作業(yè),還挺有優(yōu)...
    V是chatto閱讀 229評論 0 0

友情鏈接更多精彩內(nèi)容