美文网首页
什么情况使用 weak 关键字,相比 assign 有什么不同?

什么情况使用 weak 关键字,相比 assign 有什么不同?

作者: 携YOU手同行 | 来源:发表于2020-04-16 16:47 被阅读0次

    1.在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性。
    2.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。

    IBOutlet连出来的视图属性为什么可以被设置成weak?
    因为父控件的subViews数组已经对它有一个强引用。

    不同点:
    assign 可以用非 OC 对象,而 weak 必须用于 OC 对象。
    weak 表明该属性定义了一种“非拥有关系”。在属性所指的对象销毁时,属性值会自动清空(nil)。

    例如

    
    @property (assign, nonatomic) NSMutableArray *infoArray;
    
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        
        _infoArray = [[NSMutableArray alloc]init];
        [_infoArray addObject:@"1"];
        NSLog(@"相关修饰符的做  %@",_infoArray);
    
    }
    

    利用assign修饰数组对象,也可以进行增加和删除操作,打印日志如下

    2020-04-16 16:37:39.585598+0800 内存管理[5152:240318] 相关修饰符的做  (
        1
    )
    

    但是如果用weak去修饰一个非oc对象,就会报错


    图片.png

    相关文章

      网友评论

          本文标题:什么情况使用 weak 关键字,相比 assign 有什么不同?

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