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 @property
bê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 @synthesize
tự độ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 @synthesize
và 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 managedObjectContext
tính được tải chậm. Vì vậy, bạn khai báo của bạn managedObjectContext
là một thuộc tính, nhưng sau đó cũng viết một -(NSManagedObjectContext *)managedObjectContext
phươ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 @property
phương pháp kê khai cũng cho phép bạn tùy chọn khác, chẳng hạn như retain
và readonly
, trong đó phương pháp khai báo biến dụ không. Về cơ bản, ivar
là cách cũ, và @property
mở 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 ivar
s 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 @synthesize
trong 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 đó.