• OC-strong和weak


    1.strong:强指针/强引用
    weak:弱指针/弱引用
    2.默认情况下,任何指针都是强指针
    3.使用__weak修饰的指针为弱指针
    4.Person *p = [[Person alloc] init];
    [[Person alloc] init],系统会分配内存装这个对象,然后交给p这个指针去指着。

    5.ARC判断准则:只要没有强指针指向对象,这个对象就会被销毁
    6.如果指针p是局部变量,那函数完成时指针p就会被销毁,根据ARC,被指针所指
    向的对象也会被销毁。
    7.person对象里有个strong的dog属性。
    person.dog = dog1;
    这样,person里的_dog指针就会指向dog1指针所指的Dog对象。
    因为是strong,所以只要person对象在,Dog对象就在。
    所以普通对象要用strong。
    8.循环引用:person对象里有个dog属性,dog对象里有个person属性。
    Person *p = [[Person alloc] init];
    p.dog = [[Dog alloc] init];
    p.dog.owner = p;//加上这一句,人和狗都不能销毁。出现内存泄露
    要想不发生内存泄露,其中一个指针必须是弱指针。

    9.为什么UI控件和代理用weak?
    UI控件:可以用strong,也可以用weak,但没必要用strong,因为只要控制器在,
    控制器View内部的子控件都在。
    代理:如果不用weak那么两边都是strong,会造成内存泄露。

    10.总结
    @property属性的用法
    * weak(assign):代理/UI控件
    * strong(retain):其他对象(除代理,UI控件,字符串以外的对象)
    * copy:字符串
    * assign:非对象类型(基本数据类型int/float/BOOL/枚举/结构体)

  • 相关阅读:
    【jquery ,ajax,php】加载更多实例
    关于scrollTop
    jquery 底部导航透明度变化
    jquery 处理密码输入框(input type="password" ) 模仿placeholder
    物化视图基于rowID快速刷新
    ora-01653 无法通过1024扩展
    oracle临时表空间
    java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
    redis 简单使用
    BigDecimal 运算
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4743098.html
Copyright © 2020-2023  润新知