Dalam contoh Anda, mapView1adalah variabel instan (ivar), sepotong penyimpanan memori yang dimiliki oleh instance kelas yang didefinisikan dalam example.hdan example.m. mapViewadalah 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 @propertydeklarasi 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 = mapView1bagian 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 @synthesizepernyataan 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 @synthesizepernyataan 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.