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即可。
  • 相关阅读:
    盘子序列
    最大矩形面积
    【模板】ST表
    排队
    map循环遍历
    vue循环遍历给div添加id
    正则 匹配
    字符串拼接
    js对象追加到数组里
    二级标题左侧加粗线条
  • 原文地址:https://www.cnblogs.com/lcl15/p/6899675.html
Copyright © 2011-2022 走看看