很久沒有仔細再去思考指針的問題過了,今天突然想起,問一下自己,什么是指針呢?忽而發(fā)現(xiàn)不太清楚,忘記了。所以再次在這里溫習(xí)一下指針的概念以及強弱指針的問題。
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了,這在老版本中相當(dāng)于retain、assign。在ARC中,只要有一個對象還被strong指針?biāo)福筒粫会尫牛鴚eak則沒有,weak指針?biāo)傅膶ο螅绻麤]有其他strong指針?biāo)竸t會在創(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