zoukankan      html  css  js  c++  java
  • 10-@property中strong和weak的使用

    1、ARC 模式下 @property 参数的转变

    (1)在之前手动管理内存学习中,我们用到以下用法:

        @property (nonatomic, retain) Person *person;

        @property (nonatomic, assign) int age;

      1> retain   :   release 旧值,retain新值(适用于OC对象类型)。

      2> assign : 直接赋值(默认,适用于非OC对象类型)。

    (2)现在在ARC模式下:我们改用以下用法:

        @property (nonatomic, strong) Person *person;

         @property (nonatomic, weak) int age;

    (3)先总结ARC特点,再作分析

      1> 不允许调用release、retain、retainCount、autorelease。

      2> 允许重写dealloc,但是不允许调用[super dealloc]。

      3> @property参数

      • strong : 成员变量是强指针(适用于OC对象类型)
      • weak   : 成员变量是弱指针,相当于(注:相当于并不代表二者完全相同)原来的assign(适用于OC对象类型)
      • assign:适用于非OC对象类型

      4> 以前(手动管理)的retain改为现在(ARC)用strong,其它不变   

    2、@property中 strong 和 weak 的使用

    (1)strong的使用

      @property (nonatomatic, strong) Dog *dog;

    这句代码中:

      1> 使用强指针 strong 代替了手动管理中的 retain。

      2> strong 具有 retain 的所有功能。

      3> strong 可以将成员变量  _dog 变为强指针。

    声明两个类:Person Dog

    想让人拥有一条狗,可以这么写

    在ARC模式下,只要有strong,成员变量就是强指针。

    第1例:

    第2例:

    第3例:

    第4例:

     

    (2)weak的使用

      @property (nonatomatic, weak) Dog *dog;

    这句代码中:

      1> 使用弱指针 weak 代替了手动管理中的 assign。

      2> weak 具有 assign 的所有功能。

      3> weak 可以将成员变量  _dog 变为弱指针。

  • 相关阅读:
    lottie 动画
    .netcore 跨域问题
    数据库规范
    课程总结
    Beta版本发布
    个人作业-Alpha项目测试
    第三次作业结对编程
    第二次作业-熟悉使用工具
    第一次阅读作业
    个人作业-Alpha项目测试
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/4009034.html
Copyright © 2011-2022 走看看