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,引发错误判断

  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/lixiong-iOS/p/4446820.html
Copyright © 2011-2022 走看看