BOOL özelliği kullanma


111

Apple, bir BOOL özelliğini şu şekilde bildirmenizi önerir:

@property (nonatomic, assign, getter=isWorking) BOOL working;

Objective-C 2.0 özelliklerini ve nokta notasyonunu kullandığım için bu özelliğe self.working. Ben de kullanabileceğimi biliyorum [self isWorking]- ama buna gerek yok.

Öyleyse, her yerde nokta notasyonu kullandığım için, neden fazladan bir özellik tanımlamalıyım? Basitçe yazmak sorun olur mu

@property (nonatomic, assign) BOOL working;

Veya getter=isWorkingbenim durumumda yazmanın herhangi bir faydası var mı (nokta notasyonu kullanımı)?

Teşekkürler!


4
Bu anlamsal temelli bir öneri değil mi? bu nedenle myCar.isWorking, anlamsal olarak myCar.working'den daha doğru olacaktır
sadece

Yanıtlar:


206

Apple isX, stilistik amaçlar için bir alıcı ilan etmeyi önerir . Doğru adla nokta notasyonu veya mesaj notasyonu kullandığınız sürece alıcı adını özelleştirip özelleştirmediğiniz önemli değildir. Nokta gösterimini kullanacaksanız, bu fark etmez, yine de mülk adıyla erişirsiniz:

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;

Veya

@property (nonatomic, assign, getter=isWorking) BOOL working;

[self setWorking:YES];           // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above

4
Şüphesiz bunun, stilistik amaçlardan çok anahtar değer kodlamayla uyumlu olmakla ilgisi var mı?
Jasarien

5
Apple bu biraz garip önerir olanlar beyan isXalıcılar ancak Xcode olduğunu değil otomatik tamamlama açılır pencerede bunları listelemek mümkün. (Benim örneğimde) workingorada listelenmiştir, ancak isWorkingdeğildir. Bu yüzden BOOL alıcılarını beyan etmede herhangi bir fayda görmüyorum. Onları kullanabilmek için daha fazlasını yapmalıyım (alıcıyı beyan et) ama daha az alıyorum (otomatik tamamlama yok).
Patrick

4

Apple, stilistik amaçlar için önerir. Bu kodu yazarsanız:

@property (nonatomic,assign) BOOL working;

O zaman [object isWorking] kullanamazsınız.
Bir hata gösterecek. Ancak aşağıdaki kodu kullanırsanız

@property (assign,getter=isWorking) BOOL working;

Böylece [object isWorking] kullanabilirsiniz.


-26

İlkel türlerle özellikleri kullanmanın hiçbir faydası yoktur. @propertytahsis yığın birlikte kullanılır NSObjectsgibi NSString*, NSNumber*, UIButton*hafıza yönetilen erişimcileri ücretsiz olarak oluşturulur, çünkü vb. Bir oluşturduğunuzda BOOL, değer her zaman yığın üzerinde tahsis edilir ve bellek sızıntısını önlemek için herhangi bir özel erişimci gerektirmez. isWorkingbasitçe bir boole değerinin durumunu ifade etmenin popüler yoludur.

Başka bir OO dilinde bir değişken private bool working;ve iki erişimci yaparsınız : SetWorkingayarlayıcı ve IsWorkingerişimci için.


1
Sorusunu, yani alıcıya mülkten başka bir şeye açıkça isim vermenin amacının ne olduğunu cevaplamıyorsunuz (mülklerin iyi bir fikir olup olmadığını sormuyor). Ayrıca, özellikler KVO ve KVC'ye izin verir, bu nedenle yaptığınız nokta yanıltıcıdır.
Martin Gjaldbaek

İlkel özelliklere sahip KVO ve KVC'nin kullanımını gözden kaçırdığımda haklısınız. Sanırım ileti dizisindeki herkes isWorking ile ilgili sorusunu ele alıyor - bu bir adlandırma kuralı.
Thomson Comer

25
Bu tamamen yanlıştır; @propertydaha çok ilkel tiplerle kullanılması amaçlanmıştır ve tek başına tutarlılık uğruna önemli avantajları vardır. Ayrıca, bazı ilkel türler (bazı 32 bit CPU'larda 64 bit türleri ve birçok 32 ve 64 bit CPU'larda 128 bit türleri) atamada atomik değildir; @propertyBu durumlarda da atomikliği avantajlı olabilir.
bbum

1
İlginç - ama bunu nasıl bilebilirim ki? :) Bu atomicve nonatomicözelliklerinin bir sonucu mudur?
Thomson Comer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.