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即可。
原文地址:https://www.cnblogs.com/lcl15/p/6899675.html