zoukankan      html  css  js  c++  java
  • self. 与 _object 的使用

        我记得很久之前学习iOS的时候,便是直接使用arc 和 self.方法来定义变量的,当时对于set,get方法也是一带而过,没有怎么去深究,最近再做一个mrc工程的维护和升级,不得不重新学习了一遍内存管理方面的内容。当然少不了在set方法里面的文章了。我们在以后的编程工作中,会慢慢发现这两个是很重要的,经常需要我们去重新,以便能够做一些我们想做的工作。

      下面讲述一下set方法的使用需要注意的问题,我们直接定义一个变量的set方法,就是做了重载,在里面 不但可以赋值,还可以进行叶面更新的操作,是不是很好的呢?以前一直忽略了这一点。需要注意的是_object,我们知道有时self. 和_object 都可以对变量进行读取,但是在重载时,区别就可以体现出来了。

    1.要使重载的方法执行,要使用 self. 来获取此变量

    2.在set方法里面,不可以使用self. 否则会造成循环调用,是不是很绕呢,自己做个测试就能很直接的理解啦

    3.下面一点在mrc时才需要注意:在给变量赋值时,如果_objct 来获取,我们知道不会调用set,因此不会retain,在最终的release时,会crash,如:

    UILabel * label = [[UILabel alloc] init];
    [self.view addSubview label];
    _myLabel = label ;
    [label release];

    这是一个简单地赋值,没有任何问题,但是如果,我们在dealloc里面 又对变量myLabel 进行了release的话,就会报错,

    - (void )dealloc{
       [_myLabel release];    
       [super release];
    }// 这里与上面结合起来使用,是有错的

    此时 ,我们有两种方法可以避免这种过错,

    1)可以使用self.myLabel = label,会调用set方法,里面又一次retain操作,

    2)不对临时变量label 进行release操作。

    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

    我们在if(some conditions)判断一个变量时

    如果条件是一个 bool 型的变量会被编译为 0 、1 

    如果,条件是一个枚举型的变量,也会被编译成0、1、2、3...这种方法来判断枚举变量是否存在是不正确地,因为第一个值会是0,引发错误判断

  • 相关阅读:
    高清摄像头MIPI接口与ARM处理器的连接
    How to make apq8084
    DBI接口和DPI接口的区别
    MIPI DSI协议介绍
    LCD显示的一些基本概念以及DSI的一些clock解释
    AXI总线
    SPI,UART,I2C都有什么区别,及其各自的特点
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    用到的一些算法收集
    实用Linux命令,不求最全但求实用-------iptables命令实战
  • 原文地址:https://www.cnblogs.com/lixiong-iOS/p/4446820.html
Copyright © 2011-2022 走看看