मैं एक उद्देश्य-सी पृष्ठभूमि से आ रहा हूं और सी में अपना ज्ञान विस्तार करने की कोशिश कर रहा हूं। एक बात मुझे उलझन में डाल चुकी है, और सी और ओबज- सी। जैसा कि आप नीचे दिए गए उदाहरणों में देख सकते हैं, चीजें दोनों भाषाओं के बीच थोड़ा अलग व्यवहार करती प्रतीत होती हैं, और मैं सोच रहा था कि क्या आप समझाने में मदद कर सकते हैं?सी पॉइंटर्स बनाम उद्देश्य-सी पॉइंटर्स
सी कोड ठीक काम करता है:
void myFunction()
{
int x, *pointerX;
pointerX = &x;
*pointerX = 5;
// Prints: "x is 5"
printf("x is: %i", x);
}
Obj सी कोड में विफल रहता है:
- (void)myMethod
{
NSString *string = @"Caramel coffee", *stringPointer;
stringPointer = &string; // Warning: Assignemnt from incompatible pointer type
*stringPointer = @"Chocolate milkshake"; // Exception: Incompatible types in assignment
NSLog(@"string is: %@", string);
}
प्रश्न: क्यों मैं स्ट्रिंग की स्मृति पते पर stringPointer असाइन नहीं कर सकते (stringPointer = &string;
), और मैं सी के तहत *pointerX = 5;
प्रदर्शन करने में सक्षम क्यों हूं, लेकिन मैं ऑब्जेक्टि के तहत *stringPointer = @"Chocolate milkshake";
निष्पादित नहीं कर सकता ve-सी?
मुझे एहसास है कि ओब्जे-सी ऑब्जेक्ट्स और सी के साथ सौदा करता है, लेकिन मुझे पीछे के दृश्यों का विवरण नहीं दिख रहा है कि यह ओब्जे-सी में क्यों काम नहीं करता है। कोई भी मदद बहुत ही सराहनीय होगी। धन्यवाद! :)
क्या आप सी भाग या उद्देश्य-सी भाग को समझने की कोशिश कर रहे हैं? आपके प्रश्न से ऐसा लगता है कि आप सी सीखना चाहते हैं लेकिन आप उद्देश्य-सी कोड लिख रहे हैं जो सी की तरह दिखता है ... – stefanB
सी भाग। भ्रम के बारे में खेद है। मेरी पृष्ठभूमि है मैंने कुछ उद्देश्य-सी किताबें पढ़ी हैं, और अब मैं सी किताबें पढ़ रहा हूं। मुझे उलझन में आया कि सी में पॉइंटर्स कैसे काम करते थे, जो थोड़ा अलग लग रहा था (भले ही ओबज-सी सी के शीर्ष पर बनाया गया हो)। –
मुझे पूरा यकीन है कि पॉइंटर्स सी और ऑब्जेक्टिव-सी में समान काम करते हैं, मुझे लगता है कि कोको कक्षाओं का उपयोग करते समय आप उन्हें भ्रमित कर रहे हैं, बिना समझने के। उदाहरणों को देखने के लिए सबसे आसान बात यह है कि कैसे कोको कक्षाएं आम तौर पर उपयोग की जाती हैं जो समस्याओं को दूर कर देती हैं, क्योंकि मैंने कहा था कि यह मुद्दा क्लास पेड़ के साथ हो सकता है जो इंटरफ़ेस कक्षाओं के पीछे छिपा हुआ है। – stefanB