@synthesize và @property là hai từ khóa quan trọng trong Objective-C, nhưng chúng có mục đích khác nhau.
- @property:
@propertyđược sử dụng để định nghĩa một thuộc tính trong một class.- Nó không tự động tạo getter và setter, nhưng chỉ làm cho chúng có sẵn để sử dụng.
- Bạn có thể chỉ định các thuộc tính như “readonly” hoặc “readwrite” để quyết định xem có getter và setter nào được tự động tạo hay không.
- Cú pháp:
@property (attributes) type propertyName;Ví dụ:
@property (nonatomic, strong) NSString *name;@synthesize:
@synthesizeđược sử dụng để tự động tạo getter và setter cho một thuộc tính đã được định nghĩa bằng@property.- Nếu bạn sử dụng
@propertymà không sử dụng@synthesize, trình biên dịch sẽ tự động tạo getter và setter cho bạn. - Nếu bạn muốn kiểm soát tên của biến backing, bạn có thể sử dụng
@synthesizeđể chỉ định tên của biến đó. - Cú pháp:
@synthesize propertyName = instanceVariableName;Ví dụ:
@synthesize name = _name;Trong những phiên bản mới của Objective-C và LLVM Compiler, việc sử dụng @synthesize đã trở nên tùy chọn và không còn bắt buộc. Trình biên dịch sẽ tự động tạo getter và setter cho bạn nếu bạn chỉ sử dụng @property mà không cần sử dụng @synthesize.
Tóm lại, @property dùng để khai báo một thuộc tính, trong khi @synthesize được sử dụng để tạo ra getter và setter tương ứng cho thuộc tính đó.