2012-04-05 12 views
6

Sentezlemediğim bir özellik var, bunun yerine kendim bir alıcı ve ayarlayıcı oluşturuyorum. Bu nedenle, ARC anahtar kelimelerinin (güçlü ya da zayıf) hiçbir anlamı yoktur, bu yüzden onları yok ediyorum. Bu Xcode 4.3 üzerinde iyi çalışıyor, ancak iş arkadaşım onları XCode 4.2'de açtığında, derleyici güçlü/zayıf bir anahtar kelime bulunmadığından şikayet ediyor, bu yüzden anahtar kelimeyi tekrar anlamsız bir şekilde tekrar girmesini istedim. Hangisi doğru (anahtar kelimelerle veya anahtar kelimeler olmadan)? Sentezlemediğim özellikler için ARC anahtar kelimelerine ihtiyacım var mı?

Açıklamak gerekirse: Ben bu @property (nonatomic) NSString *foo gibi bir özelliği vardır ve .m dosyasında ben -(NSString *)foo ve -(void)setFoo:(NSString *)foo uygulamak ve @synthesize foo dahil etmiyoruz. Bir başka ilgili ayrıntı, karşılık gelen iVar olmaması, bunun yerine özelliklerin bir Core Data nesnesi ile etkileşmesidir. Bu, anahtar kelimelere güçlü veya zayıf eklemedikçe XCode 4.2'de derlenmeyecektir.

EDIT Daha alakalı bir şey düşündüm, bu özelliklerden biri Protokol'de, fark yaratır mı bilmiyorum.

cevap

1

Söz ettiğiniz nitelikler isteğe bağlıdır ilan etti. @ özelliği yönergesi özelliğini açıklayan

Mülkiyet Deklarasyonu ve Uygulama
: belgelerine alıntı. İsteğe bağlı parantezli öznitelik kümesi semantiği ve özelliğin diğer davranışları hakkında ek ayrıntılar sağlar; olası değerler için bkz. “Özellik Bildirimi Öznitelikleri”.

Mülkiyet Bildirgesi
Sen formunu @property(attribute [, attribute2, ...]) kullanarak özelliklere sahip bir özellik süslemeleri Özellikleri de. Yöntemler gibi özellikler, çevreleyen arayüz deklarasyonuna kapsamlıdır. Değişken adlarına virgülle ayrılmış bir liste kullanan özellik bildirimleri için, özellik nitelikleri, tüm özelliklerinin tümüne uygulanır.Eğer erişimci yöntemleri oluşturmak için derleyici anlatmak için @synthesize yönergesini kullanırsanız

oluşturduğu kod anahtar kelimelere göre verilen özellikleri ile uyumlu, (“Mülkiyet Uygulama Direktifleri” bölümüne bakınız). erişimci yöntemlerini kendiniz uygularsanız, belirtimle eşleştiğinden emin olmalısınız (örneğin, kopyasını belirtirseniz, değerini girmeniz gerekir, bu nedenle giriş değerini setter yöntemine kopyaladığınızdan emin olun).

Eğer o zaman kendi yöntemleri yazma ve uygun yöntemler bulamazsa zaman şikayet önler edilecek derleyici anlatıyor yerine @synthesize ait @dynamic kullanın.

Daha fazla bilgi here bulunabilir.

+0

İlginç ... Dinamik eklemeye çalışacağım ve XCode 4.2 – borrrden

+1

+ 1 üzerinde çalışıp çalışmadığını göreceğim, çok açık bir cevap – jmstone617

0

borrrden,

İlk, neden mülk açıklamada bellek politikasını elide için ilgileniyorsun? Sınıfınızın tüketicilerine politikanın ne olduğunu bildirir. Onların bilmesini istemiyor musun?

İkincisi, @synthesize bir nop değil. Dilin KVO'yu desteklediği mekanizmadır. Bunu şimdi kullanmasanız da, bu kullanım için neden geleceği önlersiniz?

Açıkçası, @property içinde @synthesize kullanarak tam bir açıklama kullanmadan, IMO, erken optimizasyonla uğraşırsınız. Mevcut tasarımınız size mesaj gönderimlerini kaydetmez ve gerektiğinde ivarların yaratılmasını ve yazılmasını yönetmenize zorlar. Ve dilin özelliklerini kaybediyorsunuz.

Tercih edilen Obj-C v2 + kalıplarının sınırlarının dışına çıkmak için iyi bir nedeniniz olmadıkça ve bunları listelemediyseniz, standart düzeni kullanmaya döneceğim. O zaman senin sorunun sadece gider.

Andrew

+0

Kendi yöntemlerinizi yazmak için genellikle iyi nedenler vardır. (Hesaplanan özellikler, doğrulama, vb. Gibi) – lnafziger

+0

'@ sentezleme 'nin KVO ile hiçbir ilgisi yoktur. KVO'yu hiç '' sentez '' yazmadan ve kendi özel ayarlayıcılarınızı ve alıcılarınızı sağlarken kullanamazsınız. –

+0

Optimizasyonla ilgili değil, mantıkla ilgili. Bu özellikler için iVars yoktur. Özellikler, özelliklerini ayarlayarak Core Data nesnelerle etkileşime girer. Bu durumda onların güçlü ya da zayıf olduğunu düşünüyor musunuz? Belki de belirlediğim sonraki nesne özelliği ile aynı. Herhangi bir yan etkiye neden olmadığım sürece onları yazmaya gerek yok. – borrrden