আমি ওবজে-সি-তে নতুন, তাই আমার প্রথম প্রশ্নটি হ'ল:
strong
এবং মধ্যে পার্থক্য কিweak
@property
বস্তুর প্রতি পয়েন্টার ঘোষণার মধ্যে ?
এছাড়াও, nonatomic
মানে কি?
আমি ওবজে-সি-তে নতুন, তাই আমার প্রথম প্রশ্নটি হ'ল:
strong
এবং মধ্যে পার্থক্য কিweak
@property
বস্তুর প্রতি পয়েন্টার ঘোষণার মধ্যে ?
এছাড়াও, nonatomic
মানে কি?
উত্তর:
একটি শক্তিশালী রেফারেন্স (যা আপনি বেশিরভাগ ক্ষেত্রে ব্যবহার করবেন) এর অর্থ হ'ল আপনি যে সম্পত্তিটি এই সম্পত্তি / ভেরিয়েবলের সাথে উল্লেখ করছেন তার "মালিকানা" চান। সংকলকটি যত্ন নেবে যে আপনি এই সম্পত্তিটিতে যে কোনও বস্তু অর্পণ করেছেন যতক্ষণ আপনি দৃ be় রেফারেন্স সহ এটিকে নির্দেশ করেন ততক্ষণ ধ্বংস হবে না। আপনি একবার সম্পত্তি সেট করেnil
নিলে বস্তুটি ধ্বংস হয়ে যাবে (যদি না এক বা একাধিক অবজেক্ট এতে দৃ a় রেফারেন্স ধরে না থাকে)।
বিপরীতে, একটি দুর্বল রেফারেন্স সহ আপনি বোঝাতে পারেন যে আপনি অবজেক্টের জীবদ্দশায় নিয়ন্ত্রণ রাখতে চান না। আপনি যে অবজেক্টটিকে দুর্বলভাবে উল্লেখ করছেন সেটি কেবলমাত্র বেঁচে থাকে কারণ কমপক্ষে অন্য একটি অবজেক্ট এর কাছে দৃ a় রেফারেন্স ধারণ করে। একবার যদি আর না হয়, বস্তুটি ধ্বংস হয়ে যায় এবং আপনার দুর্বল সম্পত্তি স্বয়ংক্রিয়ভাবে সেট হয়ে যায় nil
। আইওএস-এর দুর্বল উল্লেখগুলির সর্বাধিক ঘন ব্যবহারের ক্ষেত্রে হ'ল:
প্রতিনিধি সম্পত্তি, যা প্রায়শই ধরে রাখা চক্র এড়ানোর জন্য দুর্বলভাবে উল্লেখ করা হয়, এবং
কোনও দৃশ্যের নিয়ামকের মূল দৃশ্যের সাবভিউ / নিয়ন্ত্রণগুলি কারণ সেই মতামতগুলি ইতিমধ্যে দৃ view়ভাবে মূল দৃশ্যের দ্বারা ধারণ করে।
পারমাণবিক বনাম নন্যাটমিক বলতে গেটার এবং সেটার পদ্ধতির থ্রেড সুরক্ষা বোঝায় যা সংকলক সম্পত্তিটির জন্য সংশ্লেষ করে। পারমাণবিক (ডিফল্ট) সংকলকটিকে অ্যাকসেসর পদ্ধতিগুলিকে থ্রেড-নিরাপদ করতে (আইভার অ্যাক্সেস করার আগে একটি লক যুক্ত করে) এবং ননোটমিক তার বিপরীতটি করে। ননোটমিকের সুবিধাটি কিছুটা উচ্চতর পারফরম্যান্স। আইওএসে, অ্যাপল প্রায় সমস্ত তাদের সম্পত্তিগুলির জন্য ননোটমিক ব্যবহার করে যাতে আপনার জন্য একই পরামর্শ দেওয়ার জন্য সাধারণ পরামর্শ।
atomic
গ্যারান্টি দেয় যে সম্পত্তি একই সাথে বেশ কয়েকটি থ্রেড থেকে নিরাপদে পড়া এবং লেখা যেতে পারে। এর অর্থ এই নয় যে এমন কোনও বস্তুর যার বৈশিষ্ট্যগুলি atomic
স্বয়ংক্রিয়ভাবে থ্রেড-নিরাপদ।
বেলুনগুলির ক্ষেত্রে শক্তিশালী এবং দুর্বল উল্লেখগুলি সম্পর্কে ভাবতে সহায়ক হতে পারে।
একটি বেলুন যতক্ষণ না কমপক্ষে একজন ব্যক্তি তার সাথে সংযুক্ত স্ট্রিং ধরে থাকবে ততক্ষণ উড়ে যাবে না। স্ট্রিং ধরে থাকা লোকের সংখ্যা হ'ল রক্ষণ গণনা। যখন কেউ স্ট্রিং ধরে না থাকে, তখন ব্যালন উড়ে যাবে (ডেলোক)। অনেকের একই বেলুনে স্ট্রিং থাকতে পারে। আপনি শক্তিশালী এবং দুর্বল উভয় রেফারেন্স সহ রেফারেন্স করা অবজেক্টে সম্পত্তি সেট করতে এবং কল পদ্ধতিগুলি পেতে পারেন।
একটি শক্তিশালী রেফারেন্স হল সেই বেলুনের স্ট্রিং ধরে রাখার মতো like যতক্ষণ আপনি বেলুনের সাথে সংযুক্ত একটি স্ট্রিং ধরে আছেন, ততক্ষণ এটি উড়ে যাবে না।
একটি দুর্বল রেফারেন্স হ'ল বেলুনটি দেখার মতো। আপনি এটি দেখতে পারেন, এর বৈশিষ্ট্যগুলিতে অ্যাক্সেস করতে পারেন, এর পদ্ধতিগুলিতে কল করতে পারেন, তবে আপনার সেই বেলুনের কোনও স্ট্রিং নেই। যদি স্ট্রিং ধরে থাকা প্রত্যেককে যেতে দেয়, বেলুনটি উড়ে যায়, এবং আপনি এটি আর অ্যাক্সেস করতে পারবেন না।
strong
এবং weak
আসলে কী বোঝায়।
শক্তিশালী : এটিতে আগত মান নির্ধারণ করে, এটি আগত মান বজায় রাখবে এবং ইনস্ট্যান্স ভেরিয়েবলের বিদ্যমান মানটি প্রকাশ করবে
দুর্বল : এটি না ধরেই আগত মানকে এটি প্রদান করবে।
সুতরাং মূল পার্থক্যটি নতুন ভেরিয়েবলটি ধরে রাখা। সাধারণভাবে আপনি এটি ধরে রাখতে চান তবে এমন পরিস্থিতি রয়েছে যেখানে আপনি এটি রাখতে চান না অন্যথায় আপনি একটি ধরে রাখার চক্র পাবেন এবং মেমরিটি অবজেক্টগুলিকে মুক্ত করতে পারবেন না। যেমন। জেজ 1 আপত্তি ধরে রাখে 2 এবং আপজ 2 অ্যাজেক্ট 1 টি ধরে রাখে। এই ধরণের পরিস্থিতি সমাধানের জন্য আপনি দুর্বল উল্লেখগুলি ব্যবহার করেন।
একটি জঘন্য উত্তর: -
আমি মনে করি উপরের উত্তরে ব্যাখ্যা দেওয়া হয়েছে, সুতরাং আমি কোথায় আপনাকে ব্যবহার করতে হবে STRONG
এবং কোথায় ব্যবহার করতে হবে তা আপনাকে বলছি WEAK
:
এর ব্যবহার Weak
:
১. প্রতিনিধি ২. আউটলেটস Sub.উইউভিউ ৪. নিয়ন্ত্রণ, ইত্যাদি
এর ব্যবহার Strong
: - এর
অন্তর্ভুক্ত নয় সর্বত্র অবশিষ্ট WEAK
।
শক্তিশালী এবং দুর্বল , এই কীওয়ার্ডগুলি উদ্দেশ্য-সি-তে অবজেক্ট মালিকানার চারদিকে ঘোরে
বস্তুর মালিকানা কী?
পয়েন্টার ভেরিয়েবলগুলি তারা নির্দেশ করে এমন বস্তুর মালিকানা বোঝায়।
যে কোনও সময় পয়েন্টার ভেরিয়েবল কোনও বস্তুর দিকে নির্দেশ করে, সেই বস্তুর মালিক থাকে এবং বেঁচে থাকবে। এটি একটি শক্তিশালী রেফারেন্স হিসাবে পরিচিত ।
একটি ভেরিয়েবল allyচ্ছিকভাবে কোনও বস্তুর মালিকানা নিতে পারে না যা এটি নির্দেশ করে। একটি ভেরিয়েবল যা কোনও জিনিসের মালিকানা নেয় না এটি দুর্বল রেফারেন্স হিসাবে পরিচিত ।
@ বিশিষ্টতা এবং বৈশিষ্ট্যগুলিকে অপ্রয়োজনীয় করে এখানে বিশদ ব্যাখ্যার জন্য একবার দেখুন
এখানে অ্যাপল ডকুমেন্টেশন বিভিন্ন উদাহরণ ব্যবহার করে দুর্বল এবং শক্তিশালী সম্পত্তি মধ্যে পার্থক্য ব্যাখ্যা করেছে:
এখানে, এই ব্লগে লেখক একই জায়গায় সমস্ত সম্পত্তি সংগ্রহ করেছেন। এটি বৈশিষ্ট্যের বৈশিষ্ট্যগুলির তুলনা করতে সহায়তা করবে:
http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html
শক্তিশালী ডিফল্ট হয়। কোনও বস্তু যতক্ষণ না তার পক্ষে শক্ত পয়েন্টার থাকে ততক্ষণ "জীবিত" থাকে।
দুর্বল একটি রেফারেন্স নির্দিষ্ট করে যা রেফারেন্স করা বস্তুকে বাঁচিয়ে রাখে না। কোনও শক্তিশালী রেফারেন্স নিলে সেট করা থাকে যখন বস্তুর কোনও শক্তিশালী উল্লেখ নেই।
শক্তিশালী এবং দুর্বল রেফারেন্সটি বুঝতে নীচের উদাহরণটি বিবেচনা করুন, ধরুন আমাদের কাছে এমন পদ্ধতি রয়েছে যার নাম ডিসপ্লেলোকরিয়ালিযোগ্য able
-(void)displayLocalVariable
{
UIView* myView = [[UIView alloc] init];
NSLog(@"myView tag is = %ld", myView.tag);
}
উপরের পদ্ধতির মধ্যে মাইভিউ ভেরিয়েবলের স্কোপটি ডিসপ্লেলোকরিয়াল পদ্ধতিতে সীমাবদ্ধ, একবার পদ্ধতিটি শেষ হয়ে গেলে মাইভিউ ভেরিয়েবল যা ইউআইভিউ অবজেক্টটি ধারণ করে তা স্মৃতি থেকে বিচ্ছিন্ন হয়ে যাবে।
এখন যদি আমরা আমাদের ভিউ নিয়ন্ত্রকের জীবনচক্র জুড়ে মাইভিউ ভেরিয়েবলটি ধরে রাখতে চাই। এর জন্য আমরা ব্যবহারকারীর নাম হিসাবে পরিচিত সম্পত্তিটি তৈরি করতে পারি যা নীচে যেমন ভেরিয়েবল মাইভিউ (দেখুন @property(nonatomic,strong) UIView* usernameView;
এবং self.usernameView = myView;
নীচে কোডে) এর শক্তিশালী রেফারেন্স থাকবে ,
@interface LoginViewController ()
@property(nonatomic,strong) UIView* usernameView;
@property(nonatomic,weak) UIView* dummyNameView;
- (void)displayLocalVariable;
@end
@implementation LoginViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)viewWillAppear:(BOOL)animated
{
[self displayLocalVariable];
}
- (void)displayLocalVariable
{
UIView* myView = [[UIView alloc] init];
NSLog(@"myView tag is = %ld", myView.tag);
self.usernameView = myView;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
এখন উপরের কোডে আপনি দেখতে পাচ্ছেন যে মাইভিউকে সেলফ.উজারনেমভিউ অর্পণ করা হয়েছে এবং সেলফ.উজারনেমভিউয়ের মাইভিউতে একটি শক্তিশালী রেফারেন্স রয়েছে (যেমন আমরা @ প্রোপার্টি ব্যবহার করে ইন্টারফেসে ঘোষণা করেছি)। অতএব স্ব-ব্যবহারকারীর নামটি জীবিত না হওয়া পর্যন্ত মাইভিউ মেমরি থেকে বিচ্ছিন্ন হবে না।
এখন মাইনেম ভিউতে মাইনেম নিয়োগের বিষয়টি বিবেচনা করুন যা একটি দুর্বল রেফারেন্স, self.dummyNameView = myView;
স্ট্রং রেফারেন্সের বিপরীতে দুর্বল কেবল মাইভিউকে ধরে রাখবেন যতক্ষণ না মাইভিউর কাছে দৃ reference় উল্লেখ নেই। দুর্বল রেফারেন্স বুঝতে নীচের কোডটি দেখুন,
-(void)displayLocalVariable
{
UIView* myView = [[UIView alloc] init];
NSLog(@"myView tag is = %ld", myView.tag);
self.dummyNameView = myView;
}
উপরের কোডে মাইভিউয়ের প্রতি দুর্বল উল্লেখ রয়েছে (অর্থাত্ স্ব। ডামিনেমভিউতে মাইভিউয়ের প্রতি দুর্বল রেফারেন্স রয়েছে) তবে মাইভিউয়ের পক্ষে কোনও দৃ reference় রেফারেন্স নেই, অতএব স্ব.ড্মিমনাম ভিউ মাইভিউয়ের মান ধরে রাখতে সক্ষম হবে না।
এখন আবার নীচের কোডটি বিবেচনা করুন,
-(void)displayLocalVariable
{
UIView* myView = [[UIView alloc] init];
NSLog(@"myView tag is = %ld", myView.tag);
self.usernameView = myView;
self.dummyNameView = myView;
}
উপরের কোডে স্ব.ইউজারনেমভিউয়ের মাইভিউর প্রতি দৃ reference় উল্লেখ রয়েছে, সুতরাং ডিফলি নামভিউয়ের সাথে মাইভিউয়ের সাথে একটি শক্তিশালী রেফারেন্স যুক্ত হওয়ার পরেও পদ্ধতিটি শেষ হওয়ার পরেও মাইভিউয়ের মান হবে।
এখন যখনই আমরা কোনও ভেরিয়েবলের জন্য শক্তিশালী রেফারেন্স করি তখন এটির গণনা একের সাথে বাড়তে থাকে এবং ভেরিয়েবলটি বজায় রাখার গণনা 0 না হওয়া অবধি বিচ্যুত হবে না।
আশাকরি এটা সাহায্য করবে.
শক্তিশালী : মূলত বৈশিষ্ট্যগুলির সাথে ব্যবহৃত আমরা অন্য ক্লাসের / থেকে ডেটা পেতে বা প্রেরণ করতাম। দুর্বল : সাধারণত সমস্ত আউটলেট, সংযোগগুলি ইন্টারফেস থেকে দুর্বল ধরণের হয়।
ননোটমিক : এই জাতীয় ধরণের বৈশিষ্ট্যগুলি এমন পরিস্থিতিতে ব্যবহার করা হয় যখন আমরা আমাদের আউটলেট বা বস্তুকে বিভিন্ন যুগপত থ্রেডগুলিতে ভাগ করতে চাই না। অন্য কথায়, ননঅ্যাটমিক উদাহরণটি আমাদের একসাথে এক থ্রেডের সাথে কাজ করার জন্য তৈরি করে। আশা করি এটি আপনার জন্য সহায়ক।