zoukankan      html  css  js  c++  java
  • 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/枚举/结构体)

  • 相关阅读:
    python数据类型三(字典)
    python数据类型二(列表和元组)
    python数据类型一(重点是字符串的各种操作)
    python基础二
    jquery validate学习心得
    Block 朴实理解
    Block 使用场景
    Block 进阶
    MD5加密
    SQL语句中 chinese_prc_CS_AI_WS 以及replace用法
  • 原文地址:https://www.cnblogs.com/marshall-yin/p/4743098.html
Copyright © 2011-2022 走看看