使用“.”语法来初始化变量的时候,会产生内存泄漏的问题:
self.nameArray = [NSMutaleArray alloc] init];
上述代码,造成的问题是,在self.nameArray的时候相当于调用了set方法,引用计数+1,后面alloc的时候,引用计数再次+1。
在我们最后dealloc中release的时候,引用计数只减了一次,并没有完成全部释放,这样就造成了内存泄漏的问题。
解决方法:就是用“_”来初始化以及访问变量,这样就不会产生内存问题,虽不是什么高明的办法,但的确有效。
_nameArray = [NSMutaleArray alloc] init];
上述便是“.”和“_”在使用的时候的简单区别。
--------------------------------------------------------------------------------------
self.xxx 实际上是 调用了 getter 方法而 _xxx 则类似于 直接赋值
--------------------------------------------------------------------------------------
用@property关键字来声明的属性,在编译期会默认生成一个下划线加名称的属性变量,并且自动在implemention文件中生成setter和getter方法。
使用_yourName的方式是直接引用变量,而通过点语法调用self.yourName这种形式,实际是调用setter或getter方法!
经常会有些需要来重写属性的getter和setter方法,此时就需要使用点语法。
这并不是风格问题,而且逻辑问题!同时在当前Class的初始化方法和dealloc方法中最好不使用点语法调用实例属性,会有意想不到的问题