Do clang 3.2 (khoảng tháng 2 năm 2012), "tổng hợp mặc định" (hoặc "tổng hợp thuộc tính tự động") của thuộc tính Objective-C được cung cấp theo mặc định. Về cơ bản nó được mô tả trong bài đăng trên blog mà bạn đã đọc ban đầu: http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (ngoại trừ bài đăng đó mô tả tính năng là "đã bật, rồi tắt"; tôi không biết đó có phải là vấn đề với Xcode hay không. trên câu hỏi).
Theo tôi biết, trường hợp duy nhất trong đó các thuộc tính sẽ không được tổng hợp mặc định trong clang 3.2 là khi các thuộc tính đó được kế thừa từ giao thức. Dưới đây là một ví dụ:
#import <Foundation/Foundation.h>
@protocol P
@property int finicky;
@end
@interface A : NSObject <P>
@property int easygoing;
@end
@implementation A
@end
int main() { A *a = [A new]; a.easygoing = 0; a.finicky = 1; }
Nếu bạn biên dịch ví dụ này, bạn sẽ nhận được một cảnh báo:
test.m:11:17: warning: auto property synthesis will not synthesize property
declared in a protocol [-Wobjc-protocol-property-synthesis]
@implementation A
^
test.m:4:15: note: property declared here
@property int finicky;
^
1 warning generated.
và nếu bạn chạy nó, bạn sẽ nhận được một lỗi từ runtime:
objc[45820]: A: Does not recognize selector forward:: (while forwarding setFinicky:)
Illegal instruction: 4
Bạn có liên kết cho nơi @synthesize được mô tả là không cần thiết không? – bneely
Có lẽ ông đã nhìn thấy một số thông tin về hiện tại dưới NDA Xcode 4.4 và đã trở nên bối rối về số phiên bản. –
@bneely đã thêm một liên kết. Có lẽ tôi đang hiểu sai "@synthesize là tự động trong các phiên bản mới nhất của trình biên dịch LLVM 2.0". – SundayMonday