self.和下划线的用法区别

2016-06-29  本文已影响173人  弹一首键盘协奏曲

       在xcode中,变量有自己的set和get方法,需要程序员自己手动去写,但是还有一种变量的声明方式,我们可以使用@property声明一个属性,系统会帮我们自动生成set和get方法。

       同时我们使用中会发现当我们访问变量时候,会有self.xxx和_xxx两种访问方式,他们的有什么区别呢?下面列出我对着两种调用方式的理解;

      @property (retain, nonatomic) NSMutableArray *dataArray;

      self.dataArray是访问属性的,而_dataArray是访问实例变量的。属性就是实例变量加上set和get方法的一个正合体,他主要是承担一个外部访问的一个接口

      实例变量只能在本类中使用,外部变量不能访问!

      在类内部访问变量的时候用“-”,在类外部访问该变量时候用“.” 。

      注意事项:在手动内存管理(MRC)的时候使用“.”语法初始化变量的时候会产生内存泄露的问题,比如self.dataArray = [[NSMutaleArray alloc] init];时候self.dataArray相当于调用了set方法,一用计数会+1,在后面alloc时候引用计数会再次+1,这样在最后dealloc的时候,引用计数会为1,没有被释放,这样就造成了内存泄露。

      关于上述问题解决办法:在初始化的时候用“_”来调用,这样就不会产生内存泄露的问题了。在自动管理内存(ARC)中不会出现上述问题。

上一篇 下一篇

猜你喜欢

热点阅读