Eiko ve diğerleri doğru cevaplar verdi.
İşte daha basit bir yol: Özel üye değişkenine doğrudan erişim.
Misal
Başlık .h dosyasında:
@property (strong, nonatomic, readonly) NSString* foo;
Uygulama .m dosyasında:
self->_foo = @"someString";
İşte bu, tek ihtiyacın olan bu. Karışıklık yok, yaygara yok.
Detaylar
Xcode 4.4 ve LLVM Compiler 4.0'dan ( Xcode 4.4'teki Yeni Özellikler ) itibaren, diğer yanıtlarda tartışılan işlerle uğraşmanıza gerek yoktur:
synthesize
anahtar kelime
- Bir değişken bildirmek
- Özelliği uygulama .m dosyasında yeniden bildirme.
Bir özellik bildirerek sonra foo
, Xcode alt çizgi bir önek ile adında bir özel üye değişkeni eklemiştir varsayabiliriz: _foo
.
Özellik bildirilmişse readwrite
, Xcode adlı bir alıcı yöntemi foo
ve adlandırılmış bir ayarlayıcı oluşturur setFoo
. Bu yöntemler, nokta gösterimini (my Object.myMethod) kullandığınızda örtük olarak çağrılır. Özellik bildirilmişse readonly
, ayarlayıcı üretilmez. Bu, alt çizgi ile adlandırılan destek değişkeninin kendi başına salt okunur olmadığı anlamına gelir . readonly
Bir ayarlayıcı yöntem bir değerini ayarlamak için nokta gösterimi kullanılarak bu nedenle sentezlenmiştir, ve daha basitçe aracı bir derleyici hatası ile başarısız olur. Derleyici, var olmayan bir yöntemi (ayarlayıcı) çağırmanızı engellediği için nokta notasyonu başarısız olur.
Bunu aşmanın en basit yolu, alt çizgi ile adlandırılan üye değişkenine doğrudan erişmektir. Bunu, altçizgi isimli değişkeni bildirmeden bile yapabilirsiniz! Xcode, bu bildirimi derleme / derleme işleminin bir parçası olarak ekliyor, bu nedenle derlenen kodunuz gerçekten değişken bildirimine sahip olacaktır. Ancak bu beyanı orijinal kaynak kod dosyanızda asla görmezsiniz. Sihir değil, sadece sözdizimsel şeker .
Kullanma self->
, nesnenin / örneğin bir üye değişkenine erişmenin bir yoludur. Bunu atlayabilir ve sadece var adını kullanabilirsiniz. Ama ben + oku kullanmayı tercih ederim çünkü kodumun kendi kendini belgelemesini sağlıyor. Bu örnekte bir üye değişkeni olan self->_foo
belirsizlik olmadan bildiğinizi gördüğünüzde _foo
.
Bu arada, artıları ve doğrudan ivar erişimi karşı mülkiyet erişimci eksileri tartışılması Dr okumak gerekir düşünceli tedavinin tür tam olarak Matt Neuberg 'ın Programlama iOS kitabında. Okumayı ve yeniden okumayı çok yararlı buldum.