Trong giao diện của bạn, bạn có thể chính thức khai báo một biến thể hiện giữa các dấu ngoặc nhọn hoặc thông qua @propertybên ngoài dấu ngoặc nhọn hoặc cả hai. Dù bằng cách nào, chúng cũng trở thành thuộc tính của lớp. Sự khác biệt là nếu bạn khai báo @property, thì bạn có thể triển khai bằng cách sử dụng @synthesizetự động mã getter / setter cho bạn. Ví dụ: bộ lập mã tự động khởi tạo số nguyên và thả nổi về 0. NẾU bạn khai báo một biến thể hiện và KHÔNG chỉ định một biến tương ứng @property, thì bạn không thể sử dụng @synthesizevà phải viết getter / setter của riêng bạn.
Bạn luôn có thể ghi đè getter / setter được mã hóa tự động bằng cách chỉ định của riêng bạn. Điều này thường được thực hiện với thuộc managedObjectContexttính được tải chậm. Vì vậy, bạn khai báo của bạn managedObjectContextlà một thuộc tính, nhưng sau đó cũng viết một -(NSManagedObjectContext *)managedObjectContextphương thức. Nhớ lại rằng một phương thức có cùng tên với một biến / thuộc tính cá thể là phương thức "getter".
Các @propertyphương pháp kê khai cũng cho phép bạn tùy chọn khác, chẳng hạn như retainvà readonly, trong đó phương pháp khai báo biến dụ không. Về cơ bản, ivarlà cách cũ, và @propertymở rộng nó và làm cho nó đẹp hơn / dễ dàng hơn. Bạn có thể tham khảo hoặc sử dụng tự. tiền tố hay không, không quan trọng miễn là tên là duy nhất cho lớp đó. Ngược lại, nếu lớp cha của bạn có cùng tên thuộc tính với bạn, thì bạn phải nói như self.name hoặc super.name để chỉ định tên bạn đang nói đến.
Do đó, bạn sẽ thấy ngày càng ít người khai báo ivars giữa các dấu ngoặc nhọn, và thay vào đó chuyển sang chỉ xác định @property, rồi thực hiện @synthesize. Bạn không thể thực hiện @synthesizetrong triển khai của mình mà không có một tương ứng @property. Bộ tổng hợp chỉ biết nó là loại thuộc tính nào từ @propertyđặc tả. Câu lệnh tổng hợp cũng cho phép bạn đổi tên thuộc tính để bạn có thể tham chiếu đến thuộc tính bằng một tên (viết tắt) bên trong mã của bạn, nhưng bên ngoài trong tệp .h sử dụng tên đầy đủ. Tuy nhiên, với tính năng tự động hoàn thành thực sự tuyệt vời mà XCode hiện có, đây là một lợi thế ít hơn, nhưng vẫn còn đó.
Hy vọng điều này sẽ giúp làm sáng tỏ tất cả những nhầm lẫn và thông tin sai lệch đang trôi nổi xung quanh đó.