Trong giao diện, bạn có thể chính thức khai báo biến mẫu giữa các dấu ngoặc hoặc qua @property
bên ngoài dấu ngoặc ôm hoặc cả hai. Dù bằng cách nào, họ 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
, khi đó bạn có thể triển khai bằng cách sử dụng @synthesize
, tính năng này tự động mã hóa trình lấy/đặt hàng cho bạn. Ví dụ, bộ đặt mã tự động khởi tạo các số nguyên và số float. NẾU bạn khai báo một biến cá thể, và KHÔNG chỉ định @property
tương ứng, thì bạn không thể sử dụng @synthesize
và phải viết trình khởi động/thiết lập của riêng bạn.
Bạn luôn có thể ghi đè trình khởi động/thiết lập đượ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 tính managedObjectContext
được tải nhẹ nhàng. Do đó, bạn khai báo managedObjectContext
làm thuộc tính, nhưng sau đó cũng viết phương thức -(NSManagedObjectContext *)managedObjectContext
. Nhớ lại rằng một phương thức, có cùng tên như một biến cá thể/thuộc tính là phương thức "getter".
Phương thức khai báo @property
cũng cho phép bạn các tùy chọn khác, chẳng hạn như retain
và readonly
, mà phương pháp khai báo biến cá thể thì không. Về cơ bản, ivar
là cách cũ và @property
mở rộng nó và làm cho nó trở nên hấp dẫ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, nó không quan trọng miễn là tên là duy nhất cho lớp đó. Nếu không, nếu lớp cha của bạn có cùng tên của thuộc tính với bạn, thì bạn phải nói giống như self.name hoặc super.name để chỉ định tên bạn đang nói đến.
Vì vậy, bạn sẽ thấy ngày càng ít người tuyên bố ivar
s giữa niềng răng, và thay vào đó chuyển hướng chỉ quy định cụ thể @property
, và sau đó làm @synthesize
. Bạn không thể thực hiện @synthesize
trong quá trình triển khai của mình mà không cần tương ứng @property
. Trình tổng hợp chỉ biết loại thuộc tính là gì từ đặc điểm kỹ thuật @property
.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 một 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ế nhỏ nhưng vẫn còn đó.
Hy vọng điều này sẽ giúp làm sáng tỏ tất cả sự nhầm lẫn và thông tin sai lệch trôi nổi xung quanh đó.
Tại sao 'MyObject.h' in đậm 'MyObject.m'? –