很久没有仔细再去思考指针的问题过了,今天突然想起,问一下自己,什么是指针呢?忽而发现不太清楚,忘记了。所以再次在这里温习一下指针的概念以及强弱指针的问题。
1.指针
什么是指针?简单的来说就是保存变量地址值的变量,通过指针可以直接操作内存,所以在oc中要注意内存管理,因而出现了MRC、ARC。通过下面的代码我们首先来熟悉一下oc中指针的用法:
int a = 3;
int *b = NULL;
b = &a;
NSLog(@"%zd, %zd", a, *b);
这里的a变量是基本数据类型变量,而b变量是基本数据类型的指针变量,在oc中指针变量存放的一定是地址,所以
int *b = a
这种写法在oc中是会发生警告(编译)的,运行时是会报错的,a是基本数据类型,返回的是值而不是地址,编译器不会认可,而oc对象而是允许的,也是必须的。
int a = 3;
int *b = &a;
int **c = NULL;
c = &b;
NSLog(@"%zd, %zd, %zd", a, *b, **c);
同上,这也是一样,基本数据类似返回的是值,而oc中指针只能存放基本数据类型的地址。
2.strong、weak指针
在oc中由于所有的对象都是需要指针来获取的,所以会出现内存溢出、内存异常、内存警告的问题,所以在MRC中,我们需要手动的进行内存管理,然而在ARC相对而言就管理的少一些了,但是也并不是说就不需要我们进行监控了,再不用到的对象,我们要及时置空(nil),因而就出现了strong、weak了,这在老版本中相当于retain、assign。在ARC中,只要有一个对象还被strong指针所指,就不会被释放,而weak则没有,weak指针所指的对象,如果没有其他strong指针所指则会在创建时,就会被释放,weak指针的作用是为了防止循环引用,如delegate、block,在ARC中weak指针的运用也是很好的内存管理。
更加详细的内容,参考M了个J老师的文章:
strong、weak指针
http://blog.csdn.net/q199109106q/article/details/8565017