Apple merekomendasikan untuk mendeklarasikan properti BOOL dengan cara ini:
@property (nonatomic, assign, getter=isWorking) BOOL working;
Karena saya menggunakan properti Objective-C 2.0 dan notasi titik, saya mengakses properti ini menggunakan self.working
. Saya tahu bahwa saya juga dapat menggunakan [self isWorking]
- tetapi saya tidak harus menggunakannya.
Jadi, karena saya menggunakan notasi titik di mana-mana, mengapa saya harus mendefinisikan properti tambahan? Apakah tidak apa-apa jika hanya menulis
@property (nonatomic, assign) BOOL working;
Atau apakah saya memiliki keuntungan menulis getter=isWorking
dalam kasus saya (penggunaan notasi titik)?
Terima kasih!
objective-c
ios
properties
Patrick
sumber
sumber
Jawaban:
Apple hanya merekomendasikan mendeklarasikan
isX
getter untuk tujuan gaya. Tidak masalah apakah Anda menyesuaikan nama pengambil atau tidak, selama Anda menggunakan notasi titik atau pesan dengan nama yang benar. Jika Anda akan menggunakan notasi titik tidak ada bedanya, Anda tetap mengaksesnya dengan nama properti:Atau
sumber
isX
getter tersebut tetapi Xcode tidak dapat mencantumkannya di popup pelengkapan otomatis. (Dalam contoh saya)working
terdaftar di sana, tetapiisWorking
tidak. Jadi saya tidak melihat manfaat apa pun dalam mendeklarasikan pengambil BOOL. Saya harus berbuat lebih banyak untuk dapat menggunakannya (nyatakan pengambil) tetapi saya mendapatkan lebih sedikit (tidak ada penyelesaian otomatis).Apple merekomendasikan untuk tujuan gaya. Jika Anda menulis kode ini:
Maka Anda tidak dapat menggunakan [object isWorking].
Ini akan menunjukkan kesalahan. Tetapi jika Anda menggunakan kode di bawah ini berarti
Jadi Anda bisa menggunakan [object isWorking].
sumber
Tidak ada manfaatnya menggunakan properti dengan tipe primitif.
@property
digunakan dengan tumpukan dialokasikanNSObjects
sepertiNSString*
,NSNumber*
,UIButton*
, dan sebagainya, karena memori dikelola accesor diciptakan secara gratis. Saat Anda membuatBOOL
, nilai selalu dialokasikan di tumpukan dan tidak memerlukan pengakses khusus apa pun untuk mencegah kebocoran memori.isWorking
hanyalah cara populer untuk mengekspresikan keadaan nilai boolean.Dalam bahasa OO lain Anda akan membuat variabel
private bool working;
dan dua pengakses:SetWorking
untuk penyetel dan pengaksesIsWorking
.sumber
@property
sangat dimaksudkan untuk digunakan dengan tipe primitif dan, demi konsistensi saja, memiliki keuntungan yang signifikan. Lebih lanjut, beberapa tipe primitif (tipe 64 bit pada beberapa CPU 32 bit dan tipe 128 bit pada banyak CPU 32 dan 64 bit) adalah non-atomic pada penugasan;@property
atomicity dapat menguntungkan dalam kasus tersebut juga.atomic
dannonatomic
?