zoukankan      html  css  js  c++  java
  • 赋值的三种写法

    第一种: retain 然后 release:

    - (void)setFoo:(NSCalendarDate *)x { [x retain]; [foo release]; foo = x; }


    retain在release之前是非常重要的.如果你颠倒了它们的循序, 当x 和foo指向同一个对象, 而该对象的retain计数为1时. release将会把这个对象释放了. 评价: 如果是指向同一个对象, retain和release是多余的.

    第二种:

    - (void)setFoo:(NSCalendarDate *)x 
    {
     if (foo != x) 
    { 
    [foo release]; 
    foo = [x retain]; 
    } 
    }


    只有当foo和x指向不同对象是,才会去做改变. 评价: 必须执行一次额外的if语句

    第三种:

    - (void)setFoo:(NSCalendarDate *)x 
    { 
    [foo autorelease]; 
    foo = [x retain];
    }


    把foo添加到autorelease pool. 评价:如果之前有retain 计数相关的使用错误,那么只有当事件结束是才会出现.这样不利用调试查找错误. 前两个方法程序崩溃的根源容易找到. 而且,autorelease会影响一定的性能.

  • 相关阅读:
    JS常见异常
    Spring boot 的 @Value注解读取配置文件中的00开头的字符串
    常用网址
    IntelliJ使用教程
    eclipse
    swagger
    Mybatis
    Linux常用命令
    阿里云短信
    Flink Checkpoint-轻量级分布式快照
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693557.html
Copyright © 2011-2022 走看看