Objektif berkesan -c2.0 Buku ini mengatakan bahawa dalam kaedah permulaan dan kaedah dealloc, anda harus sentiasa membaca dan menulis data melalui pembolehubah contoh Selepas membacanya untuk masa yang lama, saya tidak faham sebabnya? Ada sesiapa yang membaca buku ini?
Bukankah ia sangat jelas dalam buku:
_name = @"Jack"
Adalah pantas untuk memberikan nilai terus kepada pembolehubah tanpa menghantar mesej melalui penetap._name = @"Jack"
不经过setter的消息发送,直接为变量赋值,速度快。对于以下的
name
属性:直接赋值是:
_name = @"Jack";
,通过self.name = @"Jack"
其实等同于_name = @"Jack".copy
;self.name = @"Jack"
会触发KVO,_name = @"Jack"
不会self.name = @"Jack"
可以在 setter 方法中进行断点调试,每次赋值你都知道。所以有一种合理折中方案就是,读取数据的时候用
NSString *str = _name
,赋值用self.name = @"Jack"
。另外需要注意的是子类可能复写setter方法,用
self.name = @"Jack"
可能不等同于_name = @"Jack".copy
Untuk atributnama berikut:
rrreee #🎜🎜#Tugasan langsung ialah:_name = @"Jack";
, passingself.name = @"Jack"
sebenarnya bersamaan dengan_name = @" Jack ".copy
;#🎜🎜# #🎜🎜# #🎜🎜##🎜🎜#self.name = @"Jack"
akan mencetuskan KVO,_name = @"Jack"
tidak akan#🎜🎜# #🎜🎜##🎜🎜#self.name = @"Jack"
Anda boleh melakukan penyahpepijatan titik putus dalam kaedah penetap dan anda akan tahu setiap kali nilai diberikan. #🎜🎜# #🎜🎜#Jadi, kompromi yang munasabah ialah menggunakanNSString *str = _name
semasa membaca data dan menggunakanself.name = @"Jack"
apabila memberikan nilai. #🎜🎜# #🎜🎜# Juga ambil perhatian bahawa subkelas mungkin mengatasi kaedah penetap, menggunakanself.name = @"Jack"
mungkin tidak bersamaan dengan_name = @"Jack".copy
. #🎜🎜# #🎜🎜# Saya tidak faham perkara yang anda kurang jelas, jadi saya hanya boleh menerangkannya secara ringkas menggunakan idea saya. #🎜🎜#