ios - Mengapakah sesetengah buku mengatakan bahawa kaedah permulaan dan kaedah dealloc harus sentiasa membaca dan menulis data melalui pembolehubah contoh?
我想大声告诉你
我想大声告诉你 2017-05-17 10:05:31
0
1
992

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?

我想大声告诉你
我想大声告诉你

membalas semua(1)
黄舟

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 属性:

@property (nonatomic, copy) NSString *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 atribut nama berikut:

rrreee #🎜🎜#Tugasan langsung ialah: _name = @"Jack";, passing self.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 menggunakan NSString *str = _name semasa membaca data dan menggunakan self.name = @"Jack" apabila memberikan nilai. #🎜🎜# #🎜🎜# Juga ambil perhatian bahawa subkelas mungkin mengatasi kaedah penetap, menggunakan self.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. #🎜🎜#
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan