অবজেক্টিভ-সি-তে নতুন যে কেউ আমাকে বজায় রাখতে, বরাদ্দ করতে, অনুলিপি করতে এবং অন্য যে কোনও অনুপস্থিত অনুগ্রহ করে তার একটি সংক্ষিপ্ত বিবরণ দিতে পারেন, যা @ প্রোপার্টি নির্দেশনার অনুসরণ করে? তারা কী করছে এবং আমি কেন একে অপরকে ব্যবহার করতে চাই?
অবজেক্টিভ-সি-তে নতুন যে কেউ আমাকে বজায় রাখতে, বরাদ্দ করতে, অনুলিপি করতে এবং অন্য যে কোনও অনুপস্থিত অনুগ্রহ করে তার একটি সংক্ষিপ্ত বিবরণ দিতে পারেন, যা @ প্রোপার্টি নির্দেশনার অনুসরণ করে? তারা কী করছে এবং আমি কেন একে অপরকে ব্যবহার করতে চাই?
উত্তর:
মিস্টারমেজের সাথে লিঙ্কিত নিবন্ধটি আর কাজ করছে না। সুতরাং, আমি আমার (খুব) অল্প সময়ের কোডিংয়ে ওজেটিভ-সি-তে যা শিখেছি তা এখানে রয়েছে:
নন্যাটমিক বনাম পারমাণবিক - "পারমাণবিক" হ'ল ডিফল্ট। সর্বদা "ননোটমিক" ব্যবহার করুন। কেন জানি না, তবে আমি যে বইটি পড়েছিলাম তাতে বলা হয়েছে "পরমাণু" ব্যবহারের "খুব কমই কারণ আছে"। (বিটিডাব্লু: আমি যে বইটি পড়েছি তা হ'ল বিএনআর "আইওএস প্রোগ্রামিং" বই))
পঠন রচনা বনাম কেবল পঠনযোগ্য - "পঠন রচনা" ডিফল্ট। আপনি @ সংশ্লেষিত করার সময়, আপনার জন্য একজন গিটার এবং সেটটার তৈরি করা হবে। আপনি যদি "পঠনযোগ্য" ব্যবহার করেন তবে কোনও সেটার তৈরি করা হবে না। এটি এমন কোনও মানের জন্য ব্যবহার করুন যা আপনি বস্তুর ইনস্ট্যান্ট হওয়ার পরে কখনও পরিবর্তন করতে চান না।
বনাম প্রতিলিপি বনাম বরাদ্দ রাখুন
atomic
পরামর্শ দেওয়া ঠিক ততটাই খারাপ nonatomic
। দুটি পছন্দই "সঠিক" এক নয়, তাই ভাষা ডিজাইনাররা দুটি সমাধানের নিরাপদতার জন্য বেছে নিয়েছিলেন। nonatomic
এটি অত্যন্ত ব্যয়বহুল থ্রেড লকগুলি বাদ দেয় কারণ প্রকৃতপক্ষে সাধারণত ভাল পছন্দ। ব্যবহারের একমাত্র কারণ atomic
হ'ল যদি আপনার সম্পত্তিটি একাধিক থ্রেড থেকে সেট করা থাকে (এক্ষেত্রে এটি বাদ দিলে ওভার-রিলিজ বা ফাঁস হতে পারে)।
@ প্রপার্টি এর বৈশিষ্ট্যগুলি সম্পর্কে জানার আগে আপনার জানা উচিত যে @ প্রপার্টি ব্যবহার কী।
@ প্রপার্টি কোনও ক্লাসটি শিবিরের উদ্দেশ্যে তৈরি করা তথ্যের সংজ্ঞা দেওয়ার জন্য একটি উপায় সরবরাহ করে। যদি আপনি @ প্রপার্টি ব্যবহার করে কোনও অবজেক্ট / ভেরিয়েবল ঘোষণা করেন তবে সেই বস্তু / ভেরিয়েবলটি তার শ্রেণিটি আমদানি করে অন্যান্য শ্রেণিতে অ্যাক্সেসযোগ্য হবে।
যদি আপনি শিরোনাম ফাইলটিতে @ প্রপার্টি ব্যবহার করে কোনও বিষয় ঘোষণা করেন, তবে আপনাকে বাস্তবায়ন ফাইলে @ সংশ্লেষ ব্যবহার করে এটি সংশ্লেষ করতে হবে। এটি বস্তুকে কেভিসি সাবলীল করে তোলে । ডিফল্টরূপে, সংকলক এই বস্তুর জন্য অ্যাকসেসর পদ্ধতি সংশ্লেষিত করবে ।
অ্যাক্সেসর পদ্ধতিগুলি: সেটার এবং গেটর।
উদাহরণ: .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;
বুলিয়ান বৈশিষ্ট্যের ক্ষেত্রে (যে বৈশিষ্ট্যগুলির মধ্যে হ্যাঁ বা কোনও মান নেই), গেটের পদ্ধতিটি "হ'ল" দিয়ে শুরু করার প্রথাগত
@property (getter=isFinished) BOOL finished;
পদ্ধতিটি একটি কোলন দিয়ে শেষ হওয়া উচিত।
@property(setter = boolBool:) BOOL finished;
কোনও অনিরাপদ রেফারেন্সটি দুর্বল রেফারেন্সের সমান কারণ এটি সম্পর্কিত সম্পর্কিত বস্তুকে বাঁচিয়ে রাখে না, তবে গন্তব্য অবজেক্টটি নির্বিঘ্ন করা হলে এটি নির্ধারণ করা হবে না ।
@property (unsafe_unretained) NSObject *unsafeProperty;
যদি আপনাকে একাধিক বৈশিষ্ট্য নির্দিষ্ট করতে হয় তবে এগুলি কেবল কমা-বিচ্ছিন্ন তালিকা হিসাবে অন্তর্ভুক্ত করুন:
@property (readonly, getter=isFinished) BOOL finished;
@property
হেডার ফাইলে, তাহলে আপনি আছে এটি ব্যবহার সমন্বয় @synthesize
বাস্তবায়ন ফাইলে।" সবসময় না। উদাহরণস্বরূপ, "ডিফল্টরূপে, কোনও readwrite
সম্পত্তি একটি উদাহরণ ভেরিয়েবল দ্বারা ব্যাক হবে, যা আবার সংকলক দ্বারা স্বয়ংক্রিয়ভাবে সংশ্লেষিত হবে।" থেকে ডক ।
অনেক নিবন্ধ পড়ার পরে আমি সমস্ত বৈশিষ্ট্যের তথ্য একসাথে রাখার সিদ্ধান্ত নিয়েছি:
- পারমাণবিক // ডিফল্ট
- nonatomic
- strong = برقرار // ডিফল্ট
- দুর্বল = অনিরাপদ_অনরীক্ষিত
- রাখা
- নির্ধারিত // ডিফল্ট
- unsafe_unretained
- কপি
- শুধুমাত্র পাঠযোগ্য
- পঠন রচনা // ডিফল্ট
নীচে বিস্তারিত নিবন্ধটির লিঙ্ক রয়েছে যেখানে আপনি এই বৈশিষ্ট্যগুলি খুঁজে পেতে পারেন।
যারা এখানে সেরা উত্তর দেয় তাদের সকলকে অনেক ধন্যবাদ !!
নিবন্ধ থেকে নমুনা বিবরণ এখানে
উদাহরণ:
@property (retain) NSString *name;
@synthesize name;
উদাহরণ:
@property (nonatomic, retain) NSString *name;
@synthesize name;
ব্যাখ্যা করা:
মনে করুন যে "নাম" নামে একটি পারমাণবিক স্ট্রিং সম্পত্তি রয়েছে এবং আপনি যদি থ্রেড এ থেকে [স্ব-সেটনেম: @ "এ"] কল করেন তবে থ্রেড বি থেকে [স্ব-সেটনেম: @ "বি"] এবং কল করুন [স্ব নাম] থ্রেড সি, তারপরে বিভিন্ন থ্রেডের সমস্ত ক্রিয়াকলাপ ক্রমিকভাবে সঞ্চালিত হবে যার অর্থ যদি একটি থ্রেড সেটার বা গেটর চালাচ্ছে তবে অন্যান্য থ্রেড অপেক্ষা করবে। এটি সম্পত্তি "নাম" পড়তে / লিখতে নিরাপদ করে তবে অন্য থ্রেড ডি যদি একই সাথে [নাম প্রকাশ] কল করে তবে এই ক্রিয়াকলাপটি ক্রাশের কারণ হতে পারে কারণ এখানে কোনও সেটার / গেটর কল জড়িত নেই। যার অর্থ কোনও অবজেক্টটি নিরাপদে পড়তে / লিখতে হবে (এটমিক) তবে থ্রেড নিরাপদ নয় কারণ অন্য থ্রেড একই সাথে কোনও ধরণের বার্তাকে অবজেক্টে প্রেরণ করতে পারে। বিকাশকারীকে এই জাতীয় সামগ্রীর জন্য থ্রেড সুরক্ষা নিশ্চিত করা উচিত।
সম্পত্তি "নাম" যদি অসাধারণ ছিল, তবে উপরোক্ত উদাহরণগুলিতে সমস্ত থ্রেড - এ, বি, সি এবং ডি একই সাথে কোনও অনির্দেশ্য ফলাফল উত্পন্ন করবে। পারমাণবিক ক্ষেত্রে, এ, বি বা সি এর যে কোনও একটি প্রথমে কার্যকর করবে তবে ডি এখনও সমান্তরালভাবে কার্যকর করতে পারে।
উদাহরণ:
@property (strong, nonatomic) ViewController *viewController;
@synthesize viewController;
উদাহরণ:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
@synthesize myButton;
শক্তিশালী ও দুর্বল ব্যাখ্যা, বিজে হোমারকে ধন্যবাদ :
কল্পনা করুন যে আমাদের অবজেক্টটি একটি কুকুর, এবং কুকুরটি পালাতে চায় (বিচ্ছিন্ন হোক)। শক্তিশালী পয়েন্টারগুলি কুকুরের উপর ছোঁড়ার মতো। যতক্ষণ না আপনি কুকুরটির সাথে জোঁক জড়ান, ততক্ষণ কুকুর পালাতে পারবে না। যদি পাঁচ জন তাদের কুকুরটিকে একটি কুকুরের সাথে সংযুক্ত করে, (একটি বস্তুর কাছে পাঁচটি দৃ poin় পয়েন্টার), তবে পাঁচটি ল্যাশ পৃথক না করা অবধি কুকুরটি পালাতে পারবে না। অন্যদিকে দুর্বল পয়েন্টারগুলি হ'ল ছোট বাচ্চাদের মতো কুকুরটির দিকে ইশারা করে এবং বলে "দেখো! একটি কুকুর!" কুকুরটি যতক্ষণ না পীড়িত থাকে ততক্ষণ ছোট বাচ্চারা কুকুরটিকে দেখতে পাবে এবং তারা এখনও এটি দেখিয়ে দেবে। যত তাড়াতাড়ি সমস্ত leashes বিচ্ছিন্ন করা হয়, যদিও, কুকুর যতই ছোট বাচ্চা এর দিকে ইশারা করছে তা পালিয়ে যায়। যত তাড়াতাড়ি শেষ শক্তিশালী পয়েন্টার (পাতন) কোনও বস্তুর দিকে নির্দেশ না করে, অবজেক্টটি বাতিল হয়ে যাবে এবং সমস্ত দুর্বল পয়েন্টার শূন্য হয়ে যাবে। আমরা কখন দুর্বল ব্যবহার করব? কেবলমাত্র আপনি দুর্বল ব্যবহার করতে চান, যদি আপনি ধরে রাখার চক্র এড়াতে চেয়েছিলেন (যেমন, পিতামাতার সন্তানকে ধরে রাখে এবং শিশু পিতামাতাকে ধরে রাখে তাই কখনও মুক্তি হয় না)।
উদাহরণ:
@property (nonatomic, retain) NSString *name;
@synthesize name;
উদাহরণ:
@property (nonatomic, assign) NSString *address;
@synthesize address;
unsafe_unretained
-উনসেফ_অনরিনটেইড হ'ল একটি মালিকানা যোগ্যতা যা এআরসিকে কীভাবে রেন্টাল / রিলিজ কলগুলি সন্নিবেশ করানো যায় তা জানায় -উনসেফ_উনারিটেনাইড হ'ল নিয়োগের এআরসি সংস্করণ।
উদাহরণ:
@property (nonatomic, unsafe_unretained) NSString *nickName;
@synthesize nickName;
উদাহরণ:
@property (nonatomic, copy) NSArray *myArray;
@synthesize myArray;
পারমাণবিক সম্পত্তি একবারে শুধুমাত্র একটি থ্রেড দ্বারা অ্যাক্সেস করা যেতে পারে। এটি থ্রেড নিরাপদ । ডিফল্ট পারমাণবিক। দয়া করে নোট করুন যে কোনও কীওয়ার্ড অ্যাটমিক নেই at
ননোটমিকের অর্থ একাধিক থ্রেড আইটেমটি অ্যাক্সেস করতে পারে t এটি থ্রেডটি অনিরাপদ
সুতরাং পরমাণু ব্যবহার করার সময় একটিকে খুব সতর্ক হওয়া উচিত s
আইওএসের উদ্দেশ্য-সিতে বৈশিষ্ট্যগুলি সম্পর্কে এই লিঙ্কগুলি পছন্দ করুন ...
https://techguy1996.blogspot.com/2020/02/properties-in-objective-c-ios.html