Dalam contoh Anda, mapView1
adalah variabel instan (ivar), sepotong penyimpanan memori yang dimiliki oleh instance kelas yang didefinisikan dalam example.h
dan example.m
. mapView
adalah nama sebuah properti . Properti adalah atribut dari sebuah objek yang dapat membaca atau diatur dengan menggunakan notasi dot: myObject.mapView
. Sebuah properti tidak memiliki harus didasarkan pada sebuah Ivar, tapi kebanyakan properti yang. The @property
deklarasi hanya memberitahu dunia bahwa ada sifat yang disebut mapView
.
@synthesize mapView = mapView1;
Baris ini memberi tahu kompiler untuk membuat setter dan pengambil mapView
, dan mereka harus menggunakan ivar yang disebut mapView1
. Tanpa = mapView1
bagian itu, kompiler akan menganggap bahwa properti dan ivar memiliki nama yang sama. (Dalam hal ini, itu akan menghasilkan kesalahan kompiler, karena tidak ada ivar yang dipanggil mapView
.)
Hasil @synthesize
pernyataan ini mirip dengan jika Anda telah menambahkan kode ini sendiri:
-(MKMapView *)mapView
{
return mapView1;
}
-(void)setMapView:(MKMapView *)newMapView
{
if (newMapView != mapView1)
{
[mapView1 release];
mapView1 = [newMapView retain];
}
}
Jika Anda menambahkan kode itu sendiri ke kelas, Anda dapat mengganti @synthesize
pernyataan itu dengan
@dynamic mapView;
Hal utama adalah memiliki perbedaan konseptual yang sangat jelas antara ivar dan properti. Mereka benar-benar dua konsep yang sangat berbeda.