指针,以及strong、weak指针

2015-12-24  本文已影响225人  懒惰的习惯

很久没有仔细再去思考指针的问题过了,今天突然想起,问一下自己,什么是指针呢?忽而发现不太清楚,忘记了。所以再次在这里温习一下指针的概念以及强弱指针的问题。

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

上一篇 下一篇

猜你喜欢

热点阅读