क्लैंग 3.2 (लगभग फरवरी 2012) के अनुसार, उद्देश्य-सी गुणों के "डिफ़ॉल्ट संश्लेषण" (या "ऑटो प्रॉपर्टी संश्लेषण") डिफ़ॉल्ट रूप से प्रदान किया जाता है। यह अनिवार्य रूप से ब्लॉग पोस्ट में वर्णित है जैसा कि आप मूल रूप से पढ़ते हैं: http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (सिवाय इसके कि उस सुविधा को "सक्षम, फिर अक्षम" के रूप में वर्णित किया गया है; मुझे नहीं पता कि यह एक्सकोड के साथ कोई समस्या है या यदि क्लैंग डेवलपर्स स्वयं वापस चले गए हैं और सवाल पर आगे)।
जहां तक मुझे पता है, एकमात्र मामला जिसमें संपत्ति क्लैंग 3.2 में डिफ़ॉल्ट-संश्लेषित नहीं होनी चाहिए, जब उन गुणों को प्रोटोकॉल से विरासत में मिला है। यहाँ एक उदाहरण है:
#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; }
आप इस उदाहरण संकलन हैं, तो आप एक चेतावनी मिल जाएगा:
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.
और यदि आप इसे चलाने के लिए, आप क्रम से एक त्रुटि मिल जाएगा:
objc[45820]: A: Does not recognize selector forward:: (while forwarding setFinicky:)
Illegal instruction: 4
क्या आपके पास एक लिंक है जहां @ सिंथेसिस को अनावश्यक के रूप में वर्णित किया गया है? – bneely
शायद उन्होंने वर्तमान में अंडर-एनडीए एक्सकोड 4.4 के बारे में कुछ जानकारी देखी है और संस्करण संख्याओं के बारे में उलझन में आ गया है। –
@bneely एक लिंक जोड़ा। शायद मैं गलत पढ़ रहा हूं "@ सिंथेसाइज एलएलवीएम 2.0 कंपाइलर के नवीनतम संस्करणों में स्वचालित है"। – SundayMonday