zoukankan      html  css  js  c++  java
  • weak的理解

    1.weak是弱引用,引用对象的计数器不会加1

    2.通常用于解决循环引用的关系,代理和block用的较多

    3.初始化——会调用objc_initWeak()函数,初始化一个新的weak指针指向对象的地址。

    4.添加引用——会调用objc_storeWeak()函数,更新指针指向,创建对应的弱引用表。

    5.释放——会调用clearDeallocating函数,根据对象地址遍历weak指针地址数组,将其设置为nil。

    6.(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放,即使还有weak型指针指向它。

    7.weak和assign的区别是:weak当指向的内存释放掉后自动nil化,防止野指针

    8.循环引用的问题

         Student *student = [[Student alloc]init];

             __block Student *stu = student;

          student.name = @"Hello World";

        student.study = ^{
            NSLog(@"my name is = %@",stu.name);
            stu = nil;
        };
    说明:现在student持有该block,block持有__block变量,__block变量又持有student对象。
    3者形成了环,导致了循环引用了,__block修辞student即可。
  • 相关阅读:
    css font-family(字体样式)
    360浏览器兼容模式,页面不能正常渲染
    SVN 如何更换IP地址
    Update 出现在的问题
    安装node-sass
    vue 里面输出带标签的html
    css 内容超出宽度自动换行
    js 判断各种数据类型
    Java_面向对象三大特征
    Java_基础(二)
  • 原文地址:https://www.cnblogs.com/lcl15/p/6899675.html
Copyright © 2011-2022 走看看