Eiko dan yang lainnya memberikan jawaban yang benar.
Berikut cara yang lebih sederhana: Akses langsung variabel anggota pribadi.
Contoh
Di file header .h:
@property (strong, nonatomic, readonly) NSString* foo;
Dalam implementasi file .m:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
Itu saja, itu saja yang Anda butuhkan. Tidak repot, tidak repot.
Detail
Mulai Xcode 4.4 dan LLVM Compiler 4.0 ( Fitur Baru di Xcode 4.4 ), Anda tidak perlu mengacaukan tugas-tugas yang dibahas dalam jawaban lain:
- Kata
synthesize
kunci
- Mendeklarasikan variabel
- Mendeklarasikan ulang properti dalam implementasi file .m.
Setelah mendeklarasikan properti foo
, Anda dapat mengasumsikan Xcode telah menambahkan variabel anggota pribadi bernama dengan awalan garis bawah: _foo
.
Jika properti dideklarasikan readwrite
, Xcode menghasilkan metode pengambil bernama foo
dan penyetel bernama setFoo
. Metode ini secara implisit dipanggil ketika Anda menggunakan notasi titik (Object.myMethod saya). Jika properti dideklarasikan readonly
, tidak ada penyetel yang dibuat. Itu berarti variabel pendukung, dinamai dengan garis bawah, itu sendiri tidak hanya dapat dibaca. The readonly
berarti hanya bahwa ada metode setter disintesis, dan karena itu menggunakan notasi dot untuk menetapkan nilai gagal dengan kesalahan kompilator. Notasi titik gagal karena kompilator menghentikan Anda dari memanggil metode (penyetel) yang tidak ada.
Cara termudah untuk menyiasatinya adalah dengan langsung mengakses variabel anggota, dinamai dengan garis bawah. Anda dapat melakukannya bahkan tanpa mendeklarasikan variabel bernama garis bawah! Xcode memasukkan deklarasi itu sebagai bagian dari proses build / compile, jadi kode yang Anda kompilasi memang akan memiliki deklarasi variabel. Tapi Anda tidak pernah melihat deklarasi itu di file kode sumber asli Anda. Bukan sihir, hanya gula sintaksis .
Menggunakan self->
adalah cara untuk mengakses variabel anggota dari objek / instance. Anda mungkin bisa menghilangkannya, dan cukup gunakan nama var. Tapi saya lebih suka menggunakan panah + diri karena itu membuat kode saya terdokumentasi sendiri. Jika Anda melihat self->_foo
Anda tahu tanpa ambiguitas, itu _foo
adalah variabel anggota pada contoh ini.
By the way, diskusi pro dan kontra dari accesor properti terhadap akses Ivar langsung adalah persis jenis pengobatan bijaksana Anda akan membaca di Dr Matt Neuberg 's Programming iOS buku. Saya merasa sangat membantu untuk membaca dan membaca ulang.