1.区别:self.是访问属性的,_是访问实例变量的。
属性是实例变量+get/set方法的集合体,主要承担外部访问的接口。
实例变量只能在本类中可访问,外部不可访问。
2.原则:在类内部访问变量时用“_”,在类外部(其他类里)访问该类的变量时用“.” 。
3.注意⚠️:
手动管理内存的情况,
使用“.”初始化变量时,会产生内存泄漏的问题。
如,self.nameArray = [NSMutaleArray alloc] init];
上述代码,在self.nameArray时相当于调用了set方法,引用计数+1,后面alloc时,引用计数再次+1。在dealloc中release时,引用计数只减了一次,并没全部释放,就造成了内存泄漏。
解决方法:用“_”初始化及访问变量,就不会产生内存泄漏。
如,_nameArray = [NSMutaleArray alloc] init];
自动管理内存(ARC)的情况,
不存在上述问题。但从编码规范上考虑,还是要注意下!!!