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

原文地址:https://www.cnblogs.com/lixiong-iOS/p/4446820.html