美文网首页
指针,以及strong、weak指针

指针,以及strong、weak指针

作者: 懒惰的习惯 | 来源:发表于2015-12-24 21:37 被阅读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

    相关文章

      网友评论

          本文标题:指针,以及strong、weak指针

          本文链接:https://www.haomeiwen.com/subject/jqwvhttx.html