@ প্রপার্টি অবজেক্টিভ-সি-তে ননাম্যাটিক ধরে রাখুন, বরাদ্দ করুন, অনুলিপি করুন


214

অবজেক্টিভ-সি-তে নতুন যে কেউ আমাকে বজায় রাখতে, বরাদ্দ করতে, অনুলিপি করতে এবং অন্য যে কোনও অনুপস্থিত অনুগ্রহ করে তার একটি সংক্ষিপ্ত বিবরণ দিতে পারেন, যা @ প্রোপার্টি নির্দেশনার অনুসরণ করে? তারা কী করছে এবং আমি কেন একে অপরকে ব্যবহার করতে চাই?


1
এগুলির জন্য অ্যাপলের নাম হ'ল "গুণাবলী" বা "সম্পত্তি বৈশিষ্ট্য"
নেভান রাজা

উত্তর:


273

মিস্টারমেজের সাথে লিঙ্কিত নিবন্ধটি আর কাজ করছে না। সুতরাং, আমি আমার (খুব) অল্প সময়ের কোডিংয়ে ওজেটিভ-সি-তে যা শিখেছি তা এখানে রয়েছে:

নন্যাটমিক বনাম পারমাণবিক - "পারমাণবিক" হ'ল ডিফল্ট। সর্বদা "ননোটমিক" ব্যবহার করুন। কেন জানি না, তবে আমি যে বইটি পড়েছিলাম তাতে বলা হয়েছে "পরমাণু" ব্যবহারের "খুব কমই কারণ আছে"। (বিটিডাব্লু: আমি যে বইটি পড়েছি তা হ'ল বিএনআর "আইওএস প্রোগ্রামিং" বই))

পঠন রচনা বনাম কেবল পঠনযোগ্য - "পঠন রচনা" ডিফল্ট। আপনি @ সংশ্লেষিত করার সময়, আপনার জন্য একজন গিটার এবং সেটটার তৈরি করা হবে। আপনি যদি "পঠনযোগ্য" ব্যবহার করেন তবে কোনও সেটার তৈরি করা হবে না। এটি এমন কোনও মানের জন্য ব্যবহার করুন যা আপনি বস্তুর ইনস্ট্যান্ট হওয়ার পরে কখনও পরিবর্তন করতে চান না।

বনাম প্রতিলিপি বনাম বরাদ্দ রাখুন

  • "অ্যাসাইন" ডিফল্ট। @ সংশ্লেষ দ্বারা নির্মিত সেটারে মানটি কেবলমাত্র বৈশিষ্ট্যের জন্য বরাদ্দ করা হবে। আমার উপলব্ধি হ'ল "অ্যাসাইন "টি পয়েন্টারবিহীন বৈশিষ্ট্যের জন্য ব্যবহার করা উচিত।
  • "রক্ষণাবেক্ষণ" আবশ্যক যখন বৈশিষ্ট্যটি কোনও বস্তুর পয়েন্টার হয়। @ সায়েন্টেসাইজ দ্বারা উত্পাদিত সেটারটি অবজেক্টটিকে ধরে রাখবে (ওরফে একটি রক্ষণ গণনা যোগ করবে)। আপনি যখন এটি শেষ করে শেষ করবেন তখন আপনাকে মুক্তি দিতে হবে।
  • "অনুলিপি" আবশ্যক যখন বস্তুটি পরিবর্তনযোগ্য হবে। আপনার যদি এই মুহুর্তের মতো বস্তুর মান প্রয়োজন হয় তবে এটি ব্যবহার করুন এবং আপনি এই মানটি অবজেক্টের অন্যান্য মালিকদের দ্বারা যে কোনও পরিবর্তন প্রতিফলিত করতে চান তা চান না। আপনি যখন অনুলিপিটি ধরে রাখছেন তখন এটি শেষ করার পরে আপনাকে অবজেক্টটি প্রকাশ করতে হবে।

@ ব্লেমাদারোট - এআরসি দিয়েও কি আমাকে এটি প্রকাশ করা দরকার
দেজেল

10
@ ওডেলিয়া - না, আপনি যদি আরসি ব্যবহার করার সময় ছেড়ে দেন তবে আমি বিশ্বাস করি আপনি একটি সংকলক ত্রুটি পাবেন।
ব্লেমাদারোট

52
"সর্বদা ননোটমিক ব্যবহার করুন" খারাপ পরামর্শ। আপনি যখন ননোটমিক ব্যবহার করেন তখন আপনি কী ছেড়ে দিচ্ছেন তা আপনার জানা উচিত।
জেসি রুসাক

7
একমত। বিশেষত, অনেক লোক জানে না যে ন্যাটামিক মানগুলি প্রাপ্তি দ্বারা স্ব-স্বীকৃত নয়। ননোটমিক প্রায়শই উপযুক্ত, তবে কার্গো কাল্ট প্রোগ্রামিং খুব কমই হয়।
ক্যাটফিশ_মান

9
ডিফল্ট ছেড়ে যাওয়ার atomicপরামর্শ দেওয়া ঠিক ততটাই খারাপ nonatomic। দুটি পছন্দই "সঠিক" এক নয়, তাই ভাষা ডিজাইনাররা দুটি সমাধানের নিরাপদতার জন্য বেছে নিয়েছিলেন। nonatomicএটি অত্যন্ত ব্যয়বহুল থ্রেড লকগুলি বাদ দেয় কারণ প্রকৃতপক্ষে সাধারণত ভাল পছন্দ। ব্যবহারের একমাত্র কারণ atomicহ'ল যদি আপনার সম্পত্তিটি একাধিক থ্রেড থেকে সেট করা থাকে (এক্ষেত্রে এটি বাদ দিলে ওভার-রিলিজ বা ফাঁস হতে পারে)।
আদম কাপলান

295

@ প্রপার্টি এর বৈশিষ্ট্যগুলি সম্পর্কে জানার আগে আপনার জানা উচিত যে @ প্রপার্টি ব্যবহার কী।

  • @ প্রপার্টি কোনও ক্লাসটি শিবিরের উদ্দেশ্যে তৈরি করা তথ্যের সংজ্ঞা দেওয়ার জন্য একটি উপায় সরবরাহ করে। যদি আপনি @ প্রপার্টি ব্যবহার করে কোনও অবজেক্ট / ভেরিয়েবল ঘোষণা করেন তবে সেই বস্তু / ভেরিয়েবলটি তার শ্রেণিটি আমদানি করে অন্যান্য শ্রেণিতে অ্যাক্সেসযোগ্য হবে।

  • যদি আপনি শিরোনাম ফাইলটিতে @ প্রপার্টি ব্যবহার করে কোনও বিষয় ঘোষণা করেন, তবে আপনাকে বাস্তবায়ন ফাইলে @ সংশ্লেষ ব্যবহার করে এটি সংশ্লেষ করতে হবে। এটি বস্তুকে কেভিসি সাবলীল করে তোলে । ডিফল্টরূপে, সংকলক এই বস্তুর জন্য অ্যাকসেসর পদ্ধতি সংশ্লেষিত করবে ।

  • অ্যাক্সেসর পদ্ধতিগুলি: সেটার এবং গেটর।

উদাহরণ: .h

@interface XYZClass : NSObject
@property (nonatomic, retain) NSString *name;
@end

.m

@implementation XYZClass
@synthesize name;
@end

এখন সংকলক নামের জন্য অ্যাকসেসর পদ্ধতি সংশ্লেষিত করবে ।

XYZClass *obj=[[XYZClass alloc]init];
NSString *name1=[obj name]; // get 'name'
[obj setName:@"liza"]; // first letter of 'name' becomes capital in setter method
  • @ প্রোপার্টি বৈশিষ্ট্যের তালিকা List

    পারমাণবিক, নন্যাটমিক, ধরে রাখুন, অনুলিপি করুন, অনুলিপি করুন

  • পারমাণবিক হ'ল ডিফল্ট আচরণ। যদি কোনও বস্তুকে পারমাণবিক হিসাবে ঘোষণা করা হয় তবে তা থ্রেড-সেফ হয়ে যায়। থ্রেড-সেফ মানে, একসময় সেই শ্রেণীর নির্দিষ্ট উদাহরণের কেবল একটি থ্রেডেরই সেই বস্তুর উপর নিয়ন্ত্রণ থাকতে পারে।

থ্রেডটি যদি গিটার পদ্ধতি সম্পাদন করে থাকে তবে অন্যান্য থ্রেড সেই বস্তুর উপর সেটার পদ্ধতি সম্পাদন করতে পারে না। ইহা ধীরগতি.

@property NSString *name; //by default atomic`
@property (atomic)NSString *name; // explicitly declared atomic`
  • ননোটমিক থ্রেড-সেফ নয়। সংশ্লেষিত অ্যাকসেসরগুলি কেবল একটি মান সেট করে বা সরাসরি প্রত্যাবর্তন করতে নির্দিষ্ট করার জন্য আপনি ননোটমিক সম্পত্তি বৈশিষ্ট্যটি ব্যবহার করতে পারেন, একই ধরণের বিভিন্ন থ্রেড থেকে একই মানটি যদি একই সাথে অ্যাক্সেস করা হয় তবে কী হবে তার কোনও গ্যারান্টি নেই।

এই কারণে, পারমাণবিকের চেয়ে কোনও অমানবিক সম্পত্তি অ্যাক্সেস করা দ্রুত।

@property (nonatomic)NSString *name;   
  • বৈশিষ্ট্যটি যখন কোনও বস্তুর পয়েন্টার হয় তখন ধরে রাখা দরকার।

সেটার পদ্ধতিটি অবজেক্টের গণনা ধরে রাখবে, যাতে এটি অটোরিলেজ পুলে মেমরিটি দখল করে।

@property (retain)NSString *name;
  • অনুলিপি আপনি যদি অনুলিপি ব্যবহার করেন তবে আপনি ধরে রাখতে পারবেন না। শ্রেণীর অনুলিপি ব্যবহার করে এর নিজস্ব অনুলিপি থাকবে।

এমনকি যদি কোনও পরিবর্তনীয় স্ট্রিং সেট করা থাকে এবং পরবর্তীকালে পরিবর্তিত হয়, উদাহরণটি সেট করার সময় এটির যে কোনও মানই ক্যাপচার করে। কোনও সেটার এবং গেটর পদ্ধতি সংশ্লেষিত হবে না।

@property (copy) NSString *name;

এখন,

NSMutableString *nameString = [NSMutableString stringWithString:@"Liza"];    
xyzObj.name = nameString;    
[nameString appendString:@"Pizza"]; 

নাম প্রভাবিত থাকবে না।

  • কেবলমাত্র আপনি যদি সেটার পদ্ধতির মাধ্যমে সম্পত্তিটি পরিবর্তনের অনুমতি না দিতে চান তবে আপনি সম্পত্তি কেবল পঠন হিসাবে ঘোষণা করতে পারেন।

সংকলক একটি গেটর জেনারেট করে তবে সেটর নয়।

@property (readonly) NSString *name;
  • রিডরাইট হ'ল ডিফল্ট আচরণ। আপনার স্পষ্টভাবে পাঠ্য রচয়িতার বৈশিষ্ট্য নির্দিষ্ট করার দরকার নেই।

এটি কেবল পঠনের বিপরীতে।

@property (readwrite) NSString *name;
  • অ্যাসাইন্ট একটি সেটার তৈরি করবে যা অনুলিপিটি অক্ষরে রাখার পরিবর্তে ইনস্ট্যান্স ভেরিয়েবলকে সরাসরি মান নির্ধারণ করে। এটি এনএসআইন্টেজার এবং সিজিফ্লোয়েটের মতো আদিম ধরণের বা আপনার সরাসরি মালিকানাধীন অবজেক্টের যেমন ডেলিগেটগুলির জন্য সেরা।

মনে রাখবেন রক্ষণাবেক্ষণ এবং বরাদ্দ করা মূলত বিনিময়যোগ্য যখন আবর্জনা সংগ্রহ সক্ষম করা থাকে।

@property (assign) NSInteger year;
  • শক্তিশালী ধরে রাখার জন্য একটি প্রতিস্থাপন।

এটি এআরসি নিয়ে আসে।

@property (nonatomic, strong) AVPlayer *player; 
  • getter = পদ্ধতি যদি আপনি গেটর পদ্ধতির জন্য আলাদা নাম ব্যবহার করতে চান তবে সম্পত্তির বৈশিষ্ট্য যুক্ত করে একটি কাস্টম নাম নির্দিষ্ট করা সম্ভব।

বুলিয়ান বৈশিষ্ট্যের ক্ষেত্রে (যে বৈশিষ্ট্যগুলির মধ্যে হ্যাঁ বা কোনও মান নেই), গেটের পদ্ধতিটি "হ'ল" দিয়ে শুরু করার প্রথাগত

@property (getter=isFinished) BOOL finished;
  • সেটটার = পদ্ধতি আপনি যদি কোনও সেটার পদ্ধতির জন্য আলাদা নাম ব্যবহার করতে চান তবে সম্পত্তিতে বৈশিষ্ট্য যুক্ত করে একটি কাস্টম নাম নির্দিষ্ট করা সম্ভব।

পদ্ধতিটি একটি কোলন দিয়ে শেষ হওয়া উচিত।

@property(setter = boolBool:) BOOL finished;
  • অনিরাপদ_মুক্ত না হওয়া কোকো এবং কোকো টাচে কয়েকটি ক্লাস রয়েছে যা এখনও দুর্বল উল্লেখগুলিকে সমর্থন করে না, যার অর্থ আপনি তাদের দূরে রাখতে কোনও দুর্বল সম্পত্তি বা দুর্বল স্থানীয় পরিবর্তনশীল ঘোষণা করতে পারবেন না। এই ক্লাসগুলির মধ্যে এনএসেক্সটভিউ, এনএসফন্ট এবং এনএস কালারস্পেস ইত্যাদি অন্তর্ভুক্ত রয়েছে। আপনার যদি এই শ্রেণীর একটির পক্ষে দুর্বল রেফারেন্স ব্যবহার করতে হয় তবে আপনাকে অবশ্যই একটি অনিরাপদ রেফারেন্স ব্যবহার করতে হবে।

কোনও অনিরাপদ রেফারেন্সটি দুর্বল রেফারেন্সের সমান কারণ এটি সম্পর্কিত সম্পর্কিত বস্তুকে বাঁচিয়ে রাখে না, তবে গন্তব্য অবজেক্টটি নির্বিঘ্ন করা হলে এটি নির্ধারণ করা হবে না ।

@property (unsafe_unretained) NSObject *unsafeProperty;

যদি আপনাকে একাধিক বৈশিষ্ট্য নির্দিষ্ট করতে হয় তবে এগুলি কেবল কমা-বিচ্ছিন্ন তালিকা হিসাবে অন্তর্ভুক্ত করুন:

@property (readonly, getter=isFinished) BOOL finished;

তদ্ব্যতীত, দুর্বল মানে এই যে অবজেক্টের রেফারেন্সে রেফারেন্স গণনা নেই, তবে এটি আদৌ রেফারেন্স করা হয়েছে বা আদৌ রেফারেন্স নেই। "হ্যাঁ, কিছু আমাকে রেফার করে" এর মতো ধরণের "বনাম" আমার কাছে 9 রেফারেন্স বিদ্যমান "(যা দৃ strong় তা কেমন)।
অ্যালেক্স জাভাটোন

6
ময়লা ওএস এক্সে আবর্জনা সংগ্রহকে হ্রাস করা এবং অ্যাপল নথির প্রতি আইওএসে অস্তিত্ব নেই বলে আবর্জনা সংগ্রহ সম্পর্কিত উত্তরের রেখাকে উপেক্ষা করুন ।
তুলসী বাউরক

4
"দ্রষ্টব্য: সম্পত্তির পারমাণবিকতা কোনও সামগ্রীর থ্রেড সুরক্ষার সমার্থক নয়" " - বিকাশকারী
অ্যাপ্লিকেশন

1
"আপনি একটি বস্তু ব্যবহার ডিক্লেয়ার যদি @propertyহেডার ফাইলে, তাহলে আপনি আছে এটি ব্যবহার সমন্বয় @synthesizeবাস্তবায়ন ফাইলে।" সবসময় না। উদাহরণস্বরূপ, "ডিফল্টরূপে, কোনও readwriteসম্পত্তি একটি উদাহরণ ভেরিয়েবল দ্বারা ব্যাক হবে, যা আবার সংকলক দ্বারা স্বয়ংক্রিয়ভাবে সংশ্লেষিত হবে।" থেকে ডক
ফ্রাঙ্কলিন ইউ

4
@ লিজা এটি একটি দুর্দান্ত উত্তর। কেন এটি গৃহীত উত্তর নয়। এটি বর্তমানে গৃহীত উত্তরের চেয়ে অনেক বেশি জ্ঞাত ব্যাখ্যা দেয়। মাঝে মাঝে স্ট্যাকওভারফ্লো বুঝি না?
চার্লস রবার্টসন

149

অনেক নিবন্ধ পড়ার পরে আমি সমস্ত বৈশিষ্ট্যের তথ্য একসাথে রাখার সিদ্ধান্ত নিয়েছি:

  1. পারমাণবিক // ডিফল্ট
  2. nonatomic
  3. strong = برقرار // ডিফল্ট
  4. দুর্বল = অনিরাপদ_অনরীক্ষিত
  5. রাখা
  6. নির্ধারিত // ডিফল্ট
  7. unsafe_unretained
  8. কপি
  9. শুধুমাত্র পাঠযোগ্য
  10. পঠন রচনা // ডিফল্ট

নীচে বিস্তারিত নিবন্ধটির লিঙ্ক রয়েছে যেখানে আপনি এই বৈশিষ্ট্যগুলি খুঁজে পেতে পারেন।

যারা এখানে সেরা উত্তর দেয় তাদের সকলকে অনেক ধন্যবাদ !!

আইওএসে পরিবর্তনশীল সম্পত্তি বৈশিষ্ট্য বা সংশোধক

নিবন্ধ থেকে নমুনা বিবরণ এখানে

  1. পারমাণবিক- অ্যাটমিক মানে শুধুমাত্র একটি থ্রেড অ্যাক্সেস ভেরিয়েবল (স্ট্যাটিক টাইপ) অ্যাক্সেস করে। -অ্যাটমিক থ্রেড নিরাপদ। -কিন্তু এটি কার্য সম্পাদনে ধীর - অ্যাটমিকটি হ'ল ডিফল্ট আচরণ-একটি আবর্জনা সংগৃহীত পরিবেশে অ্যাটমিক অ্যাক্সেসরগুলি (যেমন ধরে রাখার / প্রকাশ / পুনরায় ব্যবহার করার সময়) অন্য থ্রেডটি সঠিক সেটিং / প্রাপ্তিতে হস্তক্ষেপ না করে তা নিশ্চিত করতে একটি লক ব্যবহার করবে মান। এটি আসলে কোনও মূলশব্দ নয়।

উদাহরণ:

@property (retain) NSString *name;

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

উদাহরণ:

@property (nonatomic, retain) NSString *name;

@synthesize name;

ব্যাখ্যা করা:

মনে করুন যে "নাম" নামে একটি পারমাণবিক স্ট্রিং সম্পত্তি রয়েছে এবং আপনি যদি থ্রেড এ থেকে [স্ব-সেটনেম: @ "এ"] কল করেন তবে থ্রেড বি থেকে [স্ব-সেটনেম: @ "বি"] এবং কল করুন [স্ব নাম] থ্রেড সি, তারপরে বিভিন্ন থ্রেডের সমস্ত ক্রিয়াকলাপ ক্রমিকভাবে সঞ্চালিত হবে যার অর্থ যদি একটি থ্রেড সেটার বা গেটর চালাচ্ছে তবে অন্যান্য থ্রেড অপেক্ষা করবে। এটি সম্পত্তি "নাম" পড়তে / লিখতে নিরাপদ করে তবে অন্য থ্রেড ডি যদি একই সাথে [নাম প্রকাশ] কল করে তবে এই ক্রিয়াকলাপটি ক্রাশের কারণ হতে পারে কারণ এখানে কোনও সেটার / গেটর কল জড়িত নেই। যার অর্থ কোনও অবজেক্টটি নিরাপদে পড়তে / লিখতে হবে (এটমিক) তবে থ্রেড নিরাপদ নয় কারণ অন্য থ্রেড একই সাথে কোনও ধরণের বার্তাকে অবজেক্টে প্রেরণ করতে পারে। বিকাশকারীকে এই জাতীয় সামগ্রীর জন্য থ্রেড সুরক্ষা নিশ্চিত করা উচিত।

সম্পত্তি "নাম" যদি অসাধারণ ছিল, তবে উপরোক্ত উদাহরণগুলিতে সমস্ত থ্রেড - এ, বি, সি এবং ডি একই সাথে কোনও অনির্দেশ্য ফলাফল উত্পন্ন করবে। পারমাণবিক ক্ষেত্রে, এ, বি বা সি এর যে কোনও একটি প্রথমে কার্যকর করবে তবে ডি এখনও সমান্তরালভাবে কার্যকর করতে পারে।

  1. বলিষ্ঠ (আইওএস 4 = ধরে রাখুন) - এটি বলেছে "যতক্ষণ না আমি এটির দিকে আর ইশারা করি না" এটি এটিকে স্তূপে রাখুন "- অন্য কথায়" আমি মালিক, আপনি ধরে রাখার মতো একই উদ্দেশ্যটির সাথে জরিমানা করার আগে আপনি এটিকে বাতিল করতে পারবেন না "- আপনি শক্তিশালী ব্যবহার কেবলমাত্র যদি আপনার অবজেক্টটি ধরে রাখতে হয়। - ডিফল্টরূপে সমস্ত উদাহরণ ভেরিয়েবল এবং স্থানীয় ভেরিয়েবলগুলি শক্ত পয়েন্টার। -আমরা সাধারণত ইউআইভিউকন্ট্রোলারদের জন্য শক্তিশালী ব্যবহার করি (ইউআই আইটেমের পিতামাতারা) -আরসি দিয়ে স্ট্রং ব্যবহার করা হয় এবং এটি মূলত আপনাকে সহায়তা করে, কোনও অবজেক্টের ধরে রাখার গণনা সম্পর্কে চিন্তা না করে। আপনি যখন এটি সম্পন্ন করবেন তখন এআরসি স্বয়ংক্রিয়ভাবে এটি আপনার জন্য প্রকাশ করে। কীওয়ার্ডটির শক্তিশালী ব্যবহারের অর্থ হ'ল আপনি এই বিষয়টির মালিক।

উদাহরণ:

@property (strong, nonatomic) ViewController *viewController;

@synthesize viewController;
  1. দুর্বল (আইওএস ৪ = অনিরাপদ_আরঞ্জনিত) - এটি বলেছে "যতক্ষণ অন্য কেউ দৃ strongly়তার সাথে এটির দিকে নির্দেশ করেন ততক্ষণ এটি রাখুন" - নির্ধারিত একই জিনিস, কোনও রক্ষণ বা মুক্তি নয় - "দুর্বল" রেফারেন্স এমন একটি রেফারেন্স যা আপনি ধরে রাখেন না। -আমি সাধারণত আইবিউটলেটগুলির জন্য দুর্বল ব্যবহার করি (ইউআইভিউকন্ট্রোলার চাইল্ডস) his এটি কাজ করে কারণ পিতা-মাতার অবজেক্টের যতক্ষণ না কেবল শিশু অবজেক্টের অস্তিত্ব প্রয়োজন। - একটি দুর্বল রেফারেন্স হ'ল একটি রেফারেন্স যা কোনও আবর্জনা সংগ্রহকারী দ্বারা সংগ্রহ করা থেকে রেফারেন্স করা বস্তুকে রক্ষা করে না। -সপ্তাহিক মূলত নির্ধারিত সম্পত্তি, একটি অনাদায়ী সম্পত্তি। যখন অবজেক্টটি deallocated হয় বাদে দুর্বল পয়েন্টারটি স্বয়ংক্রিয়ভাবে শূন্য হয়

উদাহরণ:

@property (weak, nonatomic) IBOutlet UIButton *myButton;

@synthesize myButton;

শক্তিশালী ও দুর্বল ব্যাখ্যা, বিজে হোমারকে ধন্যবাদ :

কল্পনা করুন যে আমাদের অবজেক্টটি একটি কুকুর, এবং কুকুরটি পালাতে চায় (বিচ্ছিন্ন হোক)। শক্তিশালী পয়েন্টারগুলি কুকুরের উপর ছোঁড়ার মতো। যতক্ষণ না আপনি কুকুরটির সাথে জোঁক জড়ান, ততক্ষণ কুকুর পালাতে পারবে না। যদি পাঁচ জন তাদের কুকুরটিকে একটি কুকুরের সাথে সংযুক্ত করে, (একটি বস্তুর কাছে পাঁচটি দৃ poin় পয়েন্টার), তবে পাঁচটি ল্যাশ পৃথক না করা অবধি কুকুরটি পালাতে পারবে না। অন্যদিকে দুর্বল পয়েন্টারগুলি হ'ল ছোট বাচ্চাদের মতো কুকুরটির দিকে ইশারা করে এবং বলে "দেখো! একটি কুকুর!" কুকুরটি যতক্ষণ না পীড়িত থাকে ততক্ষণ ছোট বাচ্চারা কুকুরটিকে দেখতে পাবে এবং তারা এখনও এটি দেখিয়ে দেবে। যত তাড়াতাড়ি সমস্ত leashes বিচ্ছিন্ন করা হয়, যদিও, কুকুর যতই ছোট বাচ্চা এর দিকে ইশারা করছে তা পালিয়ে যায়। যত তাড়াতাড়ি শেষ শক্তিশালী পয়েন্টার (পাতন) কোনও বস্তুর দিকে নির্দেশ না করে, অবজেক্টটি বাতিল হয়ে যাবে এবং সমস্ত দুর্বল পয়েন্টার শূন্য হয়ে যাবে। আমরা কখন দুর্বল ব্যবহার করব? কেবলমাত্র আপনি দুর্বল ব্যবহার করতে চান, যদি আপনি ধরে রাখার চক্র এড়াতে চেয়েছিলেন (যেমন, পিতামাতার সন্তানকে ধরে রাখে এবং শিশু পিতামাতাকে ধরে রাখে তাই কখনও মুক্তি হয় না)।

  1. রক্ষণাবেক্ষণ = দৃ -়-এটি ধরে রাখা হয়, পুরানো মান প্রকাশিত হয় এবং এটি বরাদ্দ করা হয় - নতুন মূল্য প্রেরণ করা উচিত তা নির্দিষ্ট করে - পুনর্নির্মাণের ক্ষেত্রে পুরানো মানটি প্রেরণ করা হয় - রিলেজ-রিরেন্ট একই শক্তিশালী। -অ্যাপল বলছে যদি আপনি ধরে রাখেন তবে এটি স্বয়ংক্রিয়ভাবে রূপান্তরিত / কেবল শক্তির মতো কাজ করবে। "বরাদ্দ" এর মত পদ্ধতিগুলিতে একটি অন্তর্নিহিত "রক্ষণাবেক্ষণ" অন্তর্ভুক্ত

উদাহরণ:

@property (nonatomic, retain) NSString *name;

@synthesize name;
  1. বরাদ্দ -assign ডিফল্ট কেবল একটি পরিবর্তনশীল নিয়োগ -assign একটি সম্পত্তি গুণ যা উদ্দেশ্য সি বস্তু দুর্বল রেফারেন্সের জন্য কম্পাইলার কিভাবে সম্পত্তি এর সেটার বাস্তবায়ন সংশ্লেষের কারণে -আমি সি আদিম বৈশিষ্ট্যের জন্য বরাদ্দ ব্যবহার করেন এবং দুর্বল বলে নয় সম্পাদন করে।

উদাহরণ:

@property (nonatomic, assign) NSString *address;

@synthesize address;
  1. unsafe_unretained

    -উনসেফ_অনরিনটেইড হ'ল একটি মালিকানা যোগ্যতা যা এআরসিকে কীভাবে রেন্টাল / রিলিজ কলগুলি সন্নিবেশ করানো যায় তা জানায় -উনসেফ_উনারিটেনাইড হ'ল নিয়োগের এআরসি সংস্করণ।

উদাহরণ:

@property (nonatomic, unsafe_unretained) NSString *nickName;

@synthesize nickName;
  1. অনুলিপিটি পরিবর্তন করার সময় অনুলিপি-অনুলিপি আবশ্যক। -কপি নতুন মানটি প্রেরণ করা উচিত তা নির্দিষ্ট করে - অ্যাসাইনমেন্টের উপর অনুলিপি এবং পুরানো মান প্রেরণ করা হবে - দয়া করে। -কপিটি এমন একটি বস্তুর রিটার্ন রাখার মতো যা আপনাকে অব্যবহৃত সংগ্রহ করা পরিবেশে স্পষ্টভাবে প্রকাশ করতে হবে (উদাহরণস্বরূপ, ডেলোক)। -আপনি যদি অনুলিপি ব্যবহার করেন তবে আপনাকে এখনও ডিলোকের মধ্যে প্রকাশ করতে হবে। -যদি আপনার এই মুহুর্তের মতো বিষয়টির মূল্য প্রয়োজন হয় তবে এটি ব্যবহার করুন এবং আপনি এই মানটি অবজেক্টের অন্যান্য মালিকদের দ্বারা যে কোনও পরিবর্তন প্রতিফলিত করতে চান তা চান না। আপনি যখন অনুলিপিটি ধরে রাখছেন তখন এটি শেষ করার পরে আপনাকে অবজেক্টটি প্রকাশ করতে হবে।

উদাহরণ:

@property (nonatomic, copy) NSArray *myArray;

@synthesize myArray;

2
আমার মনে হয় অর্কের পরে, ধরে রাখা আর ব্যবহার হয় না।
মার্চ

1
সম্পূর্ণ তালিকায় 2 টি বিকল্প আইটেম মিস হয়: সেটার এবং গেটর, যা কেবলমাত্র বিকল্পগুলির পক্ষে যুক্তি প্রয়োজন।
স্কট চু

শক্তিশালী বা ধরে রাখা কেবলমাত্র বস্তুর ধরণের জন্য ডিফল্ট। এটি আদিম ধরণের ব্যবহার করা যায় না।
সালেহ এনাম শোহাগ

9

পারমাণবিক সম্পত্তি একবারে শুধুমাত্র একটি থ্রেড দ্বারা অ্যাক্সেস করা যেতে পারে। এটি থ্রেড নিরাপদ । ডিফল্ট পারমাণবিক। দয়া করে নোট করুন যে কোনও কীওয়ার্ড অ্যাটমিক নেই at

ননোটমিকের অর্থ একাধিক থ্রেড আইটেমটি অ্যাক্সেস করতে পারে t এটি থ্রেডটি অনিরাপদ

সুতরাং পরমাণু ব্যবহার করার সময় একটিকে খুব সতর্ক হওয়া উচিত s


3
"দ্রষ্টব্য: সম্পত্তির পারমাণবিকতা কোনও সামগ্রীর থ্রেড সুরক্ষার সমার্থক নয়" " বিকাশকারী.অ্যাপল.
com

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.