Trước tiên, lưu ý rằng phiên bản mới nhất của Xcode không yêu cầu @synthesize nữa. Bạn có thể (và nên) chỉ bỏ qua nó. Điều đó nói rằng, đây là những gì các phần làm.
@property
là khai báo của người truy cập. Nó chỉ là một tuyên bố. Có rất ít sự khác biệt giữa những điều sau đây:
@property (nonatomic, readwrite, strong) NSString *something;
vs
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
Sự khác biệt chính là tuyên bố những phương pháp sử dụng @property
cho phép trình biên dịch tự động tạo ra (tổng hợp) triển khai cho bạn. Không có yêu cầu mà bạn cho phép trình biên dịch làm điều đó cho bạn. Bạn hoàn toàn tự do thực hiện something
và setSomething:
một cách thủ công và điều này thường xảy ra. Tuy nhiên, nếu bạn không thực hiện chúng bằng tay, trình biên dịch sẽ tự động tạo một ngà voi cho bạn gọi là _something
và tạo ra một triển khai hợp lý cho getter và setter.
Trong các phiên bản cũ hơn của Xcode, bạn phải yêu cầu rõ ràng việc tạo tự động bằng cách sử dụng từ khóa @synthesize
. Nhưng điều đó không còn cần thiết nữa. Hôm nay, lý do duy nhất để sử dụng @synthesize
là nếu bạn muốn ngà voi có tên không chuẩn (không bao giờ làm điều đó).
Điểm mấu chốt ở đây là các phương pháp something
và setSomething:
là chỉ là các phương pháp. Không có gì huyền diệu về họ. Chúng không phải là "các phương thức đặc tính" đặc biệt."Chúng chỉ là phương pháp mà theo quy ước truy cập một phần của nhà nước. Đó là phần của nhà nước thường được lưu trữ trong một ivar, nhưng không cần phải.
Để được rõ ràng hơn: object.something
không không có nghĩa là" trả lại ngà có tên là _something
từ object
. "Điều đó có nghĩa là" trả về kết quả của [object something]
, bất kể điều đó có nghĩa là gì. "Thông thường là để trả lại giá trị của một chiếc ngà. bên ngoài) bằng cách sử dụng tờ khai @property
và bạn nên tránh khai báo trực tiếp các dấu gạch ngang. Bạn cũng nên luôn truy cập các thuộc tính của mình thông qua người truy cập (self.something
), ngoại trừ các phương thức init
và dealloc
. Trong init
và dealloc
, bạn nên trực tiếp sử dụng ivar (_something
).
Nguồn
2012-10-04 15:19:25
Hãy nghĩ về điều này như thế này nếu bạn có 'thuộc tính' nhiều hơn khả năng bạn sẽ cần 'tổng hợp'. Điều này là bởi vì có '@ property' đang nói với thế giới rằng một' getter' và 'setter' chung là cần thiết nhưng' synthesize' thực sự đang tạo 'getters' và' setters', bạn có thể ghi đè lên điều này và tạo của riêng bạn 'getters' và' setters' nếu bạn thích như những cái được tạo ra sẽ rất cơ bản. Có một chiếc đồng hồ của iTunesU 'iPad và phát triển ứng dụng iPhone của Paul Hegarty' đây là cách tôi nghĩ về nó và nó đã không thất bại được nêu ra. – Popeye
Cảm ơn rất nhiều Popeye ... ITunes U là FANTASTIC !!! Tôi đang thực sự ở bài 4 hoặc loạt năm 2011 của Paul. Tôi chỉ đang sao lưu, đọc XCode 4 Mục tiêu học tập C dọc theo bên này ... vẫn không rõ ràng với tôi. – RichWalt