objective c - উদ্দেশ্য-সি মধ্যে শক্তিশালী এবং দুর্বল মধ্যে পার্থক্য




objective-c (6)

উদাহরণস্বরূপ দৃঢ় এবং দুর্বল রেফারেন্সটি বোঝার জন্য, ধরুন আমাদের ডিসপ্লেলোকাল ওয়েভারেবল হিসাবে নাম আছে।

 -(void)displayLocalVariable
  {
     NSString myName = @"ABC";
     NSLog(@"My name is = %@", myName);
  }

মেইননাম পরিবর্তনশীলের স্কোপটি ডিসপ্লেলোক্যালভ্যারেবল পদ্ধতিতে সীমাবদ্ধ, একবার পদ্ধতিটি সম্পন্ন হয়ে গেলে আমার নাম পরিবর্তনশীলটি "ABC" স্ট্রিংটি ধারণ করে মেমরি থেকে মুছে ফেলা হবে।

এখন যদি আমরা আমাদের ভিউ কন্ট্রোলার লাইফ চক্র জুড়ে myName পরিবর্তনশীল মান ধরে রাখতে চাই। এর জন্য আমরা ব্যবহারকারী নাম হিসাবে নামটি তৈরি করতে পারি যা পরিবর্তনশীল myName এর দৃঢ় রেফারেন্স থাকবে (দেখুন @property(nonatomic,strong) NSString* username; এবং self.username = myName; নিচের কোডে), নীচের হিসাবে,

@interface LoginViewController ()

@property(nonatomic,strong) NSString* username;
@property(nonatomic,weak) NSString* dummyName;

- (void)displayLocalVariable;

@end

@implementation LoginViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

}

-(void)viewWillAppear:(BOOL)animated
{
     [self displayLocalVariable];
}

- (void)displayLocalVariable
{
   NSString myName = @"ABC";
   NSLog(@"My name is = %@", myName);
   self.username = myName;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}


@end

এখন উপরের কোডে আপনি আমারনামকে self.username এবং self.username এ একটি দৃঢ় রেফারেন্স (যেমন আমরা @property ব্যবহার করে ইন্টারফেসে ঘোষণা করেছি) তে আমার নামটি দেখানো হয়েছে (পরোক্ষভাবে এটি "ABC" স্ট্রিংয়ের জোরালো রেফারেন্স রয়েছে) দেখতে পাচ্ছেন। অতএব স্ট্রিং myName মেমরি থেকে deallocated হবে না self.username জীবিত।

  • দুর্বল রেফারেন্স

এখন dummyName এ myName নির্ধারণ করুন যা একটি দুর্বল রেফারেন্স, self.dummyName = myName; দৃঢ় রেফারেন্সের তুলনায় দুর্বল আমার নামটি দৃঢ় রেফারেন্স না হওয়া পর্যন্ত শুধুমাত্র আমার নাম ধরে রাখবে। দুর্বল রেফারেন্স বুঝতে কোড নীচের দেখুন,

-(void)displayLocalVariable
  {
     NSString myName = @"ABC";
     NSLog(@"My name is = %@", myName);
     self.dummyName = myName;
  }

উপরের কোডটিতে myName এর দুর্বল রেফারেন্স রয়েছে (অর্থাৎ self.dummyName আমার নামটির দুর্বল রেফারেন্স আছে) কিন্তু আমার নামটির কোন শক্তিশালী রেফারেন্স নেই, তাই self.dummyName myName মান ধরে রাখতে পারবে না।

এখন আবার নীচের কোড বিবেচনা,

-(void)displayLocalVariable
      {
         NSString myName = @"ABC";
         NSLog(@"My name is = %@", myName);
         self.username = myName;
         self.dummyName = myName;
      } 

উপরের কোডে self.username এর নাম আমার দৃঢ় রেফারেন্স রয়েছে, তাই myName এর সাথে যুক্ত একটি শক্তিশালী রেফারেন্স রয়েছে, সেহেতু self.dummyNameটি এখন আমার নামের একটি মান থাকবে।

এখন যখনই আমরা একটি পরিবর্তনশীলের জন্য একটি শক্তিশালী রেফারেন্স তৈরি করি তখন এটি ধরে রাখা যায় যে গণনাটি একের মধ্যে বৃদ্ধি পাবে এবং আইই এর অপরিবর্তন গণনা 0 পর্যন্ত পৌঁছে পর্যন্ত পরিবর্তনশীলকে বিযুক্ত করা হবে না।

আশাকরি এটা সাহায্য করবে.

আমি Obj-C তে নতুন, তাই আমার প্রথম প্রশ্ন হল:

অবজেক্টের পয়েন্টারগুলির @property ঘোষণায় strong এবং weak মধ্যে পার্থক্য কী?

এছাড়াও, nonatomic অর্থ কি?


একটি শক্তিশালী রেফারেন্স (যা আপনি বেশিরভাগ ক্ষেত্রে ব্যবহার করবেন) মানে আপনি এই সম্পত্তি / পরিবর্তনশীলের সাথে উল্লেখ করা বস্তুর "মালিক" হতে চান। আপনি এই দৃঢ় রেফারেন্সের সাথে এটি নির্দেশ করে যতক্ষণ পর্যন্ত আপনি এই সম্পত্তিটিতে বরাদ্দ করা কোনও বস্তু ধ্বংস করা হবে না তখন কম্পাইলার যত্ন নেবেন। শুধুমাত্র একবার আপনি সম্পত্তিটি nil সেট করলে অবজেক্টটি ধ্বংস হয়ে যাবে (যদি না এক বা একাধিক বস্তু এটিতে দৃঢ় রেফারেন্স রাখে)।

বিপরীতে, একটি দুর্বল রেফারেন্সের মাধ্যমে আপনি ইঙ্গিত করেন যে আপনি বস্তুর জীবদ্দশায় নিয়ন্ত্রণ করতে চান না। যে বস্তুটি আপনি দুর্বলভাবে উল্লেখ করছেন কেবল তার উপরই জীবনযাপন করে কারণ কমপক্ষে অন্য একটি বস্তু এটির জন্য একটি শক্তিশালী রেফারেন্স ধারণ করে। একবার এটি আর নেই, বস্তুটি ধ্বংস হয়ে যাবে এবং আপনার দুর্বল সম্পত্তি স্বয়ংক্রিয়ভাবে nil । IOS এর মধ্যে দুর্বল রেফারেন্সগুলির সবচেয়ে ঘন ঘন ব্যবহার ক্ষেত্রে:

  1. প্রতিনিধি বৈশিষ্ট্য, যা প্রায়ই চক্র বজায় রাখা, এবং দুর্বলভাবে উল্লেখ করা হয়

  2. একটি দৃশ্য নিয়ামক এর প্রধান দৃশ্যের সাবউইউ / কন্ট্রোলগুলি কারণ যে দৃশ্যগুলি ইতিমধ্যে দৃঢ়ভাবে প্রধান দৃশ্য দ্বারা ধরে রাখা হয়।

পারমাণবিক বনাম nonatomic কম্পাইলার সম্পত্তি জন্য সংশ্লেষ যে গটার এবং সেট্টার পদ্ধতির থ্রেড নিরাপত্তা বোঝায়। পারমাণবিক (ডিফল্ট) কম্পাইলারটিকে অ্যাক্সেসার পদ্ধতিগুলিকে থ্রেড-নিরাপদ (আইভার অ্যাক্সেস করার আগে একটি লক যুক্ত করে) তৈরি করতে বলে এবং nonatomic বিপরীত করে। Nonatomic সুবিধা সামান্য উচ্চ কর্মক্ষমতা। আইওএস এ, অ্যাপল প্রায় সব তাদের বৈশিষ্ট্যগুলির জন্য nonatomic ব্যবহার করে তাই সাধারণ পরামর্শ আপনার জন্য একই কাজ।


বেলুনের ক্ষেত্রে শক্তিশালী এবং দুর্বল রেফারেন্স সম্পর্কে চিন্তা করা সহায়ক হতে পারে।

যতক্ষণ অন্তত একজন ব্যক্তি এটি সংযুক্ত একটি স্ট্রিং ধরে ধরে রাখা হয় একটি বেলুন উড়ে না। স্ট্রিং ধারণ করে মানুষের সংখ্যা ধরে রাখা হয়। যখন কেউ স্ট্রিং ধরে না থাকে, তখন বেলন উড়ে যাবে (ডিলক)। অনেক মানুষ একই বেলুন স্ট্রিং থাকতে পারে। আপনি দৃঢ় এবং দুর্বল রেফারেন্সগুলির সাথে রেফারেন্সকৃত বস্তুর বৈশিষ্ট্যাবলী এবং কল পদ্ধতিগুলি সেট / সেট করতে পারেন।

একটি শক্তিশালী রেফারেন্স যেমন বেলুন একটি স্ট্রিং ধরে রাখা হয়। যতক্ষণ আপনি বেলুনের সাথে সংযুক্ত একটি স্ট্রিং ধরে থাকবেন, ততক্ষণ এটি উড়ে যাবে না।

একটি দুর্বল রেফারেন্স বেলুন তাকান মত। আপনি এটি দেখতে পারেন, এটির বৈশিষ্ট্যগুলি অ্যাক্সেস করতে, এর পদ্ধতিগুলি কল করুন, কিন্তু আপনার কাছে সেই বেলুনের কোন স্ট্রিং নেই। যদি স্ট্রিং সম্মুখের দিকে ধরে রাখা যায়, তবে বেলুন উড়ে যায় এবং আপনি আর এটিকে অ্যাক্সেস করতে পারবেন না।


একটি ডামি উত্তর: -

আমি উপরের উত্তরে ব্যাখ্যা দেওয়া হয়, তাই আমি আপনাকে বলার অপেক্ষা রাখে না যেখানে STRONG ব্যবহার করা হয় এবং WEAK ব্যবহার যেখানে :

Weak ব্যবহার: - 1. প্রতিনিধিরা 2. আউটলেট 3. সাবউইউউস 4. কন্ট্রোল ইত্যাদি

Strong ব্যবহার: - সর্বত্র যা WEAK অন্তর্ভুক্ত করা হয় না।


শক্তিশালী : মূলত ব্যবহৃত বৈশিষ্ট্যগুলির সাথে আমরা অন্য ক্লাসগুলিতে / থেকে তথ্য পাঠাতে বা পাঠাতে ব্যবহার করতাম। দুর্বল : সাধারণত সমস্ত আউটলেটস, সংযোগ ইন্টারফেস থেকে দুর্বল টাইপ হয়।

Nonatomic : আমরা আমাদের আউটলেট বা বস্তুর বিভিন্ন একযোগে থ্রেড শেয়ার করতে চান না যখন এই ধরনের বৈশিষ্ট্য শর্তাবলী ব্যবহৃত হয়। অন্য কথায়, Nonatomic দৃষ্টান্ত একটি সময়ে আমাদের থ্রেড মোকাবেলা করতে আমাদের বৈশিষ্ট্য করতে। আশা করি এটি আপনার জন্য সহায়ক।


শক্তিশালী এবং দুর্বল , এই কীওয়ার্ডগুলি উদ্দেশ্য-সি-তে বস্তুর মালিকানা কাছাকাছি ঘুরছে

বস্তু মালিকানা কি?

পয়েন্টার ভেরিয়েবল তারা নির্দেশ করে বস্তুর মালিকানা বোঝায়।

  • যখন একটি পদ্ধতি (বা ফাংশন) একটি স্থানীয় পরিবর্তনশীল থাকে যা একটি বস্তুর দিকে নির্দেশ করে, তখন সেই পরিবর্তনশীল বস্তুটিকে নির্দেশিত বস্তুর মালিক বলে মনে করা হয়।
  • যখন কোন বস্তুর একটি দৃষ্টান্ত পরিবর্তনশীল থাকে যা অন্য বস্তুর দিকে নির্দেশ করে, পয়েন্টারের সাথে বস্তুর দিকে নির্দেশিত বস্তুর মালিক বলে মনে করা হয়।

যে কোনও সময় একটি বস্তুর একটি পয়েন্টার পরিবর্তনশীল পয়েন্ট, যে বস্তুর মালিক আছে এবং জীবিত থাকবে। এটি একটি শক্তিশালী রেফারেন্স হিসাবে পরিচিত হয়।

একটি পরিবর্তনশীল বিকল্পভাবে একটি বস্তুর মালিকানা নিতে পারে না যে এটি নির্দেশ করে। একটি পরিবর্তনশীল যা একটি বস্তুর মালিকানা গ্রহণ করে না একটি দুর্বল রেফারেন্স হিসাবে পরিচিত হয়।

এখানে বিস্তারিত ব্যাখ্যা দেওয়ার জন্য এখানে ক্লিক করুন @ প্রপার্টি এবং গুণাবলী





objective-c