नोट, मैं विशेष रूप से इस तथ्य का जिक्र कर रहा हूं कि क्लास विधियों के साथ डॉट नोटेशन का उपयोग किया जा रहा है, उदाहरण के तरीकों से नहीं।क्लास विधियों के साथ उद्देश्य-सी डॉट नोटेशन?
जिज्ञासा से, मैं देखना चाहता था कि क्या होगा यदि मैंने क्लास विधि के साथ उद्देश्य-सी डॉट नोटेशन सिंटैक्स का उपयोग करने का प्रयास किया।
#import <Foundation/Foundation.h>
static int _value = 8;
@interface Test : NSObject
+ (int) value;
+ (void) setValue:(int)value;
@end
@implementation Test
+ (int) value {
return _value;
}
+ (void) setValue:(int)value {
_value = value;
}
@end
int main(int argc, char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Test.value: %d", Test.value);
NSLog(@"[Test value]: %d", [Test value]);
Test.value = 20;
NSLog(@"Test.value: %d", Test.value);
NSLog(@"[Test value]: %d", [Test value]);
[Test setValue:30];
NSLog(@"Test.value: %d", Test.value);
NSLog(@"[Test value]: %d", [Test value]);
[pool release];
return 0;
}
मैं देखना है कि इस संकलित किया गया था, अकेले क्या है के साथ निष्पादित दें हैरान था, मुझे लगता है, सही व्यवहार: मेरे प्रयोग इस प्रकार थी। क्या यह कहीं कहीं दस्तावेज है, या सिर्फ संकलक का एक झुकाव है?
मैं मैक ओएस एक्स 10.6 पर जीसीसी का उपयोग कर संकलित:
gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659)
compile using: gcc ObjCClassDotSyntax.m -framework Foundation -o ObjCClassDotSyntax
run: ./ObjCClassDotSyntax
output:
2010-03-03 17:33:07.342 test[33368:903] Test.value: 8
2010-03-03 17:33:07.346 test[33368:903] [Test value]: 8
2010-03-03 17:33:07.351 test[33368:903] Test.value: 20
2010-03-03 17:33:07.352 test[33368:903] [Test value]: 20
2010-03-03 17:33:07.353 test[33368:903] Test.value: 30
2010-03-03 17:33:07.353 test[33368:903] [Test value]: 30
और, मुझे आश्चर्य है, क्यों Xcode ** स्वत: पूर्ण नहीं ** जब डॉट वाक्य रचना वर्ग तरीकों के लिए प्रयोग किया जाता है? यदि यह वास्तव में वाक्य रचनात्मक चीनी है, उदा। 'foo.prop' पूरी तरह से '[foo prop]' में अनुवाद करता है, फिर एक्सकोड क्लास विधियों और उदाहरण विधियों के बीच अंतर नहीं होना चाहिए। ईविल के लिए – Timo