oc __weak和__strong的区别

时间:2024-01-14 20:22:38

1.先上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id __weak obj=[[NSObject alloc]init];
    NSLog(@"弱引用自身地址:%p",&obj);
    NSLog(@"弱引用指向地址:%p",obj);
    id __strong obj0=[[NSObject alloc]init];
    id __weak obj1=obj0;
    NSLog(@"强引用自身地址:%p",&obj0);
    NSLog(@"弱引用自身地址:%p",&obj1);
    NSLog(@"强引用指向地址:%p",obj0);
    NSLog(@"弱引用指向地址:%p",obj1);
    
    obj1=nil;
//    obj0=nil;
    NSLog(@"弱引用销毁时强类型变量指向地址:%p",obj0);
    NSLog(@"弱引用销毁时弱类型变量指向地址:%p",obj1);

2.运行结果

oc __weak和__strong的区别

3.当强类型变量设为nil时,两个变量都指向空

4.由此可见,强引用时对变量拥有,弱引用时只是指向该变量而不拥有。