বুঝতে delegates
হলে বুঝতে হবে protocols
।
ক protocol
একটি পরিষেবার চুক্তির মতো। যখন কোনও বস্তু (প্রায়শই একটি UIViewController
সাবক্লাস, তবে সর্বদা নয়) চুক্তিতে স্বাক্ষর করে তখন এটি বলছে যে "আপনি আমাকে যে বার্তা প্রেরণ করেছেন সেটিকে ফিরে পেতে আমি যুক্তি সরবরাহ করতে আগ্রহী"। এটি NSNotificationCenter
একটি আগ্রহের স্তরের জন্য সাইন আপ করার ক্ষেত্রে অনুরূপ , পার্থক্যটি এমন একটি বস্তু যা প্রতিনিধিদলকে নিয়োগ দেয় কেবল delegate
একবারে একটি হতে পারে, যেখানে একাধিক বস্তু একই জন্য সাইন আপ করতে পারে NSNotification
।
অ্যাপল ব্যাপকভাবে প্রতিনিধিদের ব্যবহার করে। আরও এবং আরও বেশি কিছু, আপনি দেখতে পাচ্ছেন অ্যাপল তাদের এপিআইর অনেকগুলি এর উপরে সরিয়ে নিয়েছে blocks
, যা callbacks
অন্যান্য ভাষায় সমান ।
বলা হচ্ছে, প্রতিনিধিরা এমভিসি বজায় রাখতে সহায়তা করে, যদিও আমি যুক্তি দিই যে প্রতিনিধিরা নিজেই এবং এটি একটি নকশার ধরণ। এটি নিয়ন্ত্রণকারীদের থেকে মডেলগুলি পৃথক করতে সহায়তা করে। যেমন জন কার্টরাইটের উদাহরণে, একটি UITableView
সারি এবং বিভাগগুলি কীভাবে প্রদর্শন করতে হয় তা জানে। UITableViewCells
পারফরম্যান্সের কারণে কীভাবে পুনরায় ব্যবহার করতে হয় তা এটি জানে । এটি অন্যান্য জিনিসগুলির একটি UIScrollView
জানে। তবে কোন কোষ প্রদর্শন করতে হবে তা তা জানে না । কীভাবে এই কোষগুলিকে জনবসতি করতে হবে তা জানে না । প্রদত্ত কোন কোষটি পুনরায় ব্যবহার করতে হবে তা তা জানে না NSIndexPath
। এটি সত্যিই নিয়ন্ত্রণকারীর কাজ হওয়া উচিত ways প্রতিনিধিদলটি টেবিল ভিউটিকে এই অ-ভিউ লজিকটিকে এমন কোনও অবজেক্টে অফলোড করার অনুমতি দেয় যা যাইহোক এই দায়িত্ব থাকা উচিত।
এর চেয়ে বড় বিষয়, আপনি কোনও অবজেক্টের পুরো জীবনকালের জন্য একজন প্রতিনিধিতে লক নন। আপনার প্রদত্তের জন্য খুব সহজেই একাধিক ডেটাসোর্স থাকতে পারে UITableView
এবং প্রয়োজন অনুসারে রান সময়ে এটি স্যুইচ করতে পারেন।
সুতরাং, একদিকে, প্রতিনিধি ডেটা সরবরাহ করার জন্য এবং কোনও বস্তু থেকে ইন্টারঅ্যাকশনগুলিতে প্রতিক্রিয়া জানাতে দুর্দান্ত। আপনি UIKit ক্লাস, এই ধরনের একটি অনেক এটা দেখতে পাবেন UITableView
, UIPickerView
, UICollectionView
, ইত্যাদি
আপনি অবজেক্টের মধ্যে তথ্য পাস করতে চাইলে প্রতিনিধিদলও খুব কার্যকর useful আপনি খুব সহজেই আপনার নিজের প্রোটোকল তৈরি করতে এবং সেগুলি অনুসরণ করতে আপনার নিজের অবজেক্টগুলিতে সাইন আপ করতে পারেন। তদ্ব্যতীত, প্রোটোকল পদ্ধতিগুলি @required
ডিফল্টরূপে হয় তবে আপনি কিছু পদ্ধতিতে নির্দিষ্ট করতে পারেন@optional
। এটির প্রয়োজন হলে এটি আপনাকে কিছুটা নমনীয়তা দেয়। আসুন ধরা যাক আপনার কাছে পিতামাতাকে দেখার নিয়ামক এবং একটি শিশু দর্শন নিয়ামক রয়েছে। এটি করতে আপনি নতুন কনটেইনমেন্ট এপিআই ব্যবহার করছেন। সাধারণত, যদি আপনার পিতামাতার কাছ থেকে সন্তানের কাছে তথ্য প্রেরণের দরকার হয় তবে আপনি এটি কোনও সম্পত্তি দিয়ে করেন। সম্পন্ন. তবে আপনার যদি সন্তানের কাছ থেকে তথ্য পিতামাতার কাছে ফেরত দেওয়ার দরকার হয়? সন্তানের মধ্যে কিছু পরিবর্তন হতে পারে এবং আপনার পিতামাতাকে জানাতে হবে need অবশ্যই, আপনি নির্দিষ্ট মানগুলিতে কিছু কেভিও করতে পারেন। তবে আপনি কখন জানতে চাইবেন কখন একটি বোতাম টিপবে। চাইল্ড ভিউ কন্ট্রোলারে কেবল একটি নতুন প্রোটোকল তৈরি করুন
@protocol MyChildDelegate
- (void)buttonWasTappedInChild:(MyChildViewController *)childViewController;
@end
@interface MyChildViewController : UIViewController
@property (weak, nonatomic) id <MyChildDelegate> delegate;
@end
মাইচিল্ডভিউ কনট্রোলার-এ, যখন আপনার বোতামটি টেপ করা হয়েছে, কেবলমাত্র আপনার প্রতিনিধি ডেলিগেট বার্তায় সাড়া দেয় কিনা তা পরীক্ষা করে দেখুন (যদি এটি প্রয়োজন হয় এবং আপনার প্রতিনিধি পদ্ধতিটি বাস্তবায়ন না করে তবে আপনি ক্রাশ করবেন you @optional
আপনার প্রয়োজন হলে পদ্ধতিটি তৈরি করতে পারেন ) এবং প্রেরণ করুন এটা:
- (IBAction)someButtonTapped:(id)sender {
if ([self.delegate respondsToSelector:@selector(buttonWasTappedInChild:)]) {
[self.delegate buttonWasTappedInChild:self];
}
}
তারপরে আপনার মাই চাইল্ডভিউ কনট্রোলারের প্রতিনিধি সেট করুন এবং আপনার প্যারেন্ট ভিউ কন্ট্রোলারে self
প্রয়োগ করুন - (void)buttonWasTappedInChild:(MyChildViewController *)childViewController
। গম্ভীর গর্জন! আপনার কাছে সন্তানের কাছ থেকে পিতামাতার কাছে তথ্য পাঠানো হয়েছে। দুটি বস্তুর মধ্যে সম্পর্ক এমনকি পিতামাতার / সন্তানের মতো ঘনিষ্ঠ হওয়ার প্রয়োজন হয় না। এটি একটি পরিষেবার চুক্তি, সুতরাং যতক্ষণ না অবৈধ সাইন আপ প্রয়োজনীয় পদ্ধতিগুলি প্রয়োগ করে দর কষাকষির শেষ অবধি রাখে, আপনি সোনার!
দ্রষ্টব্য: প্রতিনিধিদের দুর্বল / নির্ধারিত বৈশিষ্ট্য হওয়া উচিত, অন্যথায় আপনি এমন একটি রক্ষণশীল চক্র প্রবেশ করবেন যেখানে না কোনও বস্তু হ্রাস করা যাবে।
আশাকরি এটা সাহায্য করবে!