प्रोटोकॉल और कैटेगरी
संचार अनुबंध परिभाषित करने के लिए प्रोटोकॉल और सबक्लास बनाए बिना मौजूदा वर्गों में विधियाँ जोड़ने के लिए कैटेगरी का अन्वेषण करें।
प्रोटोकॉल और कैटेगरी, CoddyKit पर विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
व्यवहार का विस्तार: परिचय
Objective-C के प्रोटोकॉल और कैटेगरी पर इस पाठ में आपका स्वागत है! ये शक्तिशाली सुविधाएँ हैं, जो आपको अपनी क्लास की कार्यक्षमता को लचीले तरीकों से बढ़ाने देती हैं।
हम देखेंगे कि प्रोटोकॉल ऑब्जेक्ट के बीच संचार के लिए अनुबंध कैसे परिभाषित करते हैं और कैटेगरी सबक्लास बनाए बिना मौजूदा क्लास में मेथड कैसे जोड़ने देती हैं।
प्रोटोकॉल: संचार अनुबंध
Objective-C के प्रोटोकॉल को किसी खाके या अनुबंध की तरह समझिए। यह उन मेथड की सूची घोषित करता है, जिन्हें अन्य क्लास लागू करना चुन सकती हैं।
- जो क्लास किसी प्रोटोकॉल को 'अपनाती' है, वह उसके आवश्यक मेथड लागू करने का वादा करती है।
- यह संचार के तरीकों को स्थापित करने के लिए महत्वपूर्ण है, जैसे लोकप्रिय डेलीगेट पैटर्न।
- प्रोटोकॉल Java या C# जैसी भाषाओं के इंटरफ़ेस के समान होते हैं।
प्रोटोकॉल परिभाषित करना
प्रोटोकॉल परिभाषित करने के लिए आप @protocol डायरेक्टिव का उपयोग करते हैं। आप मेथड को @required (जिन्हें लागू करना आवश्यक है) या @optional (जिन्हें लागू किया जा सकता है) के रूप में निर्दिष्ट कर सकते हैं।
प्रोटोकॉल अक्सर <NSObject> के अनुरूप होते हैं, जिसका अर्थ है कि इसे अपनाने वाली कोई भी क्लास Objective-C ऑब्जेक्ट होनी चाहिए।
@protocol MyServiceDelegate <NSObject>
@required
- (void)serviceDidFinishLoadingData:(NSArray *)data;
@optional
- (void)serviceDidStartRequest;
@endप्रोटोकॉल अपनाना और लागू करना
कोई क्लास अपने सुपरक्लास के बाद कोणीय कोष्ठकों में प्रोटोकॉल का नाम लिखकर उसे अपनाती है। इसके बाद उसे सभी @required मेथड लागू करने होते हैं।
आइए एक उदाहरण देखें, जिसमें DataLoader क्लास को यह बताने के लिए एक डेलीगेट की आवश्यकता है कि डेटा तैयार है।
#import <Foundation/Foundation.h>
// 1. Define the delegate protocol
@protocol DataLoaderDelegate <NSObject>
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data;
- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error;
@end
// 2. Class that uses the delegate
@interface MyDataLoader : NSObject
@property (nonatomic, weak) id<DataLoaderDelegate> delegate; // The delegate property
- (void)loadData;
@end
@implementation MyDataLoader
- (void)loadData {
NSLog(@"DataLoader: Starting data load...");
// Simulate network request
NSString *result = @"Sample Data Loaded!";
// Notify the delegate
if ([self.delegate respondsToSelector:@selector(dataLoader:didFinishLoadingData:)]) {
[self.delegate dataLoader:self didFinishLoadingData:result];
}
}
@end
// 3. Class that conforms to the protocol (the delegate)
@interface MyDataConsumer : NSObject <DataLoaderDelegate> // Adopting the protocol
- (void)startConsumption;
@end
@implementation MyDataConsumer
- (void)startConsumption {
MyDataLoader *loader = [[MyDataLoader alloc] init];
loader.delegate = self; // Set self as the delegate
[loader loadData];
}
#pragma mark - DataLoaderDelegate Methods
- (void)dataLoader:(id)loader didFinishLoadingData:(NSString *)data {
NSLog(@"DataConsumer: Received data: %@", data);
}
- (void)dataLoaderDidFail:(id)loader withError:(NSError *)error {
NSLog(@"DataConsumer: Failed with error: %@", error.localizedDescription);
}
@end
// 4. Main execution
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyDataConsumer *consumer = [[MyDataConsumer alloc] init];
[consumer startConsumption];
}
return 0;
}कैटेगरी: क्लास का विस्तार
कैटेगरी किसी मौजूदा क्लास में नए मेथड जोड़ने का तरीका देती हैं, भले ही वह क्लास आपकी अपनी न हो (जैसे NSString या NSObject), और इसके लिए मूल स्रोत कोड में बदलाव करने या सबक्लास बनाने की आवश्यकता नहीं होती।
- ये कोड को तार्किक समूहों में व्यवस्थित करने के लिए बहुत उपयोगी हैं।
- कैटेगरी का उपयोग करके किसी क्लास में नए इंस्टेंस वेरिएबल नहीं जोड़े जा सकते।
- यदि किसी कैटेगरी मेथड का नाम मौजूदा मेथड के समान हो, तो कैटेगरी का कार्यान्वयन उपयोग किया जाएगा (इससे अनपेक्षित व्यवहार हो सकता है!)।
कैटेगरी परिभाषित करना
कैटेगरी परिभाषित करने के लिए आप एक इंटरफ़ेस फ़ाइल (.h) और एक कार्यान्वयन फ़ाइल (.m) बनाते हैं। सिंटैक्स इस प्रकार दिखाई देता है:
@interface ClassName (CategoryName)आइए NSString पर एक कैटेगरी बनाकर उसमें कुछ उपयोगिता मेथड जोड़ें।
// NSString+MyStringAdditions.h
#import <Foundation/Foundation.h>
@interface NSString (MyStringAdditions)
- (BOOL)isEmailValid;
- (NSString *)stringByCapitalizingFirstLetter;
@endकैटेगरी मेथड लागू करना
अब अपनी NSString+MyStringAdditions कैटेगरी में घोषित किए गए मेथड लागू करते हैं। लागू होने के बाद ये मेथड किसी भी इंस्टेंस NSString पर उपलब्ध हो जाते हैं!
यह कैसे काम करता है, यह देखने के लिए इस उदाहरण को चलाकर देखें:
#import <Foundation/Foundation.h>
// 1. Define the Category Interface
@interface NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello;
- (NSString *)stringWithAppendedExclamation;
@end
// 2. Implement the Category Methods
@implementation NSString (MyStringAdditions)
- (NSString *)stringWithPrependedHello {
return [NSString stringWithFormat:@"Hello, %@", self];
}
- (NSString *)stringWithAppendedExclamation {
return [NSString stringWithFormat:@"%@!", self];
}
@end
// 3. Main execution
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *name = @"CoddyKit";
// Use category methods
NSString *greeting = [name stringWithPrependedHello];
NSString *excitedGreeting = [greeting stringWithAppendedExclamation];
NSLog(@"Original: %@", name);
NSLog(@"Greeting: %@", greeting);
NSLog(@"Excited: %@", excitedGreeting);
}
return 0;
}प्रोटोकॉल बनाम कैटेगरी: किसका उपयोग करें
यह जानना महत्वपूर्ण है कि प्रोटोकॉल और कैटेगरी में से कब किसे चुनना चाहिए:
- प्रोटोकॉल: इनका उपयोग तब करें जब आपको ऐसा साझा इंटरफ़ेस या अनुबंध परिभाषित करना हो, जिसके अनुरूप कई असंबंधित क्लास हो सकती हैं (जैसे डेलीगेट पैटर्न या डेटा स्रोत)। ये परिभाषित करते हैं कि ऑब्जेक्ट क्या कर सकता है।
- कैटेगरी: इनका उपयोग तब करें जब आप किसी मौजूदा क्लास में उपयोगिता मेथड जोड़ना, संबंधित मेथड को समूहित करना या सबक्लास बनाए बिना किसी क्लास का विस्तार करना चाहते हों (जैसे
NSStringमें कस्टम पार्सिंग मेथड जोड़ना)। ये विस्तार करती हैं कि ऑब्जेक्ट कैसे व्यवहार कर सकता है।
प्रोटोकॉल और इनहेरिटेंस
कोई प्रोटोकॉल अन्य प्रोटोकॉल को भी अपना सकता है, जिससे आवश्यकताओं का एक पदानुक्रम बनता है। उदाहरण के लिए, @protocol ChildProtocol <ParentProtocol> का अर्थ है कि ChildProtocol में ParentProtocol के सभी मेथड शामिल हैं।
इससे आप सरल अनुबंधों को मिलाकर अधिक जटिल अनुबंध बना सकते हैं।
त्वरित जाँच: प्रोटोकॉल
निम्नलिखित Objective-C कोड अंश पर विचार करें:
@protocol DataProcessor
@required
- (void)processData:(NSArray *)data;
@optional
- (void)didStartProcessing;
@end इस प्रोटोकॉल का मुख्य उद्देश्य क्या है?
पुनरावलोकन: प्रोटोकॉल और कैटेगरी
बहुत अच्छा! इस पाठ में आपने Objective-C की दो शक्तिशाली सुविधाओं के बारे में सीखा:
- प्रोटोकॉल: ऐसे मेथड का अनुबंध परिभाषित करते हैं, जिन्हें क्लास संचार सक्षम करने और साझा इंटरफ़ेस स्थापित करने के लिए अपना सकती हैं।
- कैटेगरी: इनहेरिटेंस के बिना नए मेथड जोड़कर मौजूदा क्लास का विस्तार करती हैं; ये उपयोगिता फ़ंक्शन और कोड संगठन के लिए उपयोगी हैं।
इनमें दक्षता हासिल करने से आपको अधिक लचीले और मॉड्यूलर Objective-C ऐप्लिकेशन बनाने में सहायता मिलेगी!
एआई शिक्षक के साथ Objective-C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 12
- पाठ
- 48
अक्सर पूछे जाने वाले प्रश्न
क्या “प्रोटोकॉल और कैटेगरी” पाठ निःशुल्क है?
हाँ—“प्रोटोकॉल और कैटेगरी” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“प्रोटोकॉल और कैटेगरी” में मैं क्या सीखूँगा?
संचार अनुबंध परिभाषित करने के लिए प्रोटोकॉल और सबक्लास बनाए बिना मौजूदा वर्गों में विधियाँ जोड़ने के लिए कैटेगरी का अन्वेषण करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“प्रोटोकॉल और कैटेगरी” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर विरासत और एंटरप्राइज़ ऐप्स के लिए Objective-C iOS विकास पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- वर्ग, ऑब्जेक्ट और विधियाँ
- प्रॉपर्टी और इंस्टेंस चर
- प्रोटोकॉल और कैटेगरी
- विरासत और विधि ओवरराइडिंग