উদ্দেশ্য-সি ঘোষিত @ প্রপার্টি বৈশিষ্ট্যগুলি (ননোটমিক, অনুলিপি, শক্তিশালী, দুর্বল)


289

কেউ বিস্তারিতভাবে আমাকে ব্যাখ্যা করতে পারবেন যখন আমি প্রতিটি বৈশিষ্ট্য ব্যবহার করা আবশ্যক: nonatomic, copy, strong, weak, এবং তাই হয়, একটি ঘোষণা সম্পত্তি জন্য, এবং ব্যাখ্যা প্রতিটি কী করে? কিছু ধরণের উদাহরণও দুর্দান্ত হবে। আমি এআরসি ব্যবহার করছি।


এখানে উত্তর stackoverflow.com/a/32942413/1961064
Grigori Jlavyan

উত্তর:


559

এই উত্তরে অসংখ্য ত্রুটি রয়েছে এবং এটিও পুরানো। অন্যান্য প্রশ্ন / উত্তর এবং মন্তব্য দেখুন দয়া করে।


Nonatomic

nonatomicমাল্টি থ্রেডিংয়ের উদ্দেশ্যে ব্যবহৃত হয়। যদি আমরা ঘোষণার সময় অ-প্রাকৃতিক বৈশিষ্ট্যটি সেট করে রেখেছি, তবে অন্য যে কোনও থ্রেডটি সেই অবজেক্টে অ্যাক্সেস পেতে চায় তারা এটি অ্যাক্সেস করতে পারে এবং বহু-থ্রেডিংয়ের ক্ষেত্রে ফলাফল দিতে পারে।

কপি

copyপ্রয়োজনীয় যখন বস্তু পরিবর্তনযোগ্য হয়। আপনার যদি এই মুহুর্তের মতো বস্তুর মান প্রয়োজন হয় তবে এটি ব্যবহার করুন এবং আপনি এই মানটি অবজেক্টের অন্যান্য মালিকদের দ্বারা যে কোনও পরিবর্তন প্রতিফলিত করতে চান তা চান না। আপনি যখন অনুলিপিটি ধরে রাখছেন তখন এটি শেষ করার পরে আপনাকে অবজেক্টটি প্রকাশ করতে হবে।

বরাদ্দ

Assignকিছুটা বিপরীত copy। কোনও assignসম্পত্তির প্রাপ্তিকে কল করার সময় , এটি প্রকৃত ডেটার জন্য একটি রেফারেন্স দেয়। সাধারণত আপনার যখন আদিম ধরণের সম্পত্তি থাকে (ভাসা, ইনট, বিওএল ...) আপনি এই বৈশিষ্ট্যটি ব্যবহার করেন

রাখা

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

শক্তিশালী

strongউদ্দেশ্য-সি স্বয়ংক্রিয় রেফারেন্স গণনা (এআরসি) এর অংশ হিসাবে ধরে রাখা বৈশিষ্ট্যের প্রতিস্থাপন। নন-আরসি কোডে এটি ধরে রাখার কেবল প্রতিশব্দ।

আইওএস 5 strongএবং এটি সম্পর্কে জানার weakজন্য এটি একটি ভাল ওয়েবসাইট http://

দুর্বল

weakstrongএটি 1 এর দ্বারা রেফারেন্সের গণনা বাড়িয়ে দেবে না similar এটি অনুরূপ It এটি সেই বস্তুর মালিক হয়ে ওঠে না তবে কেবল এটির একটি রেফারেন্স ধরে holds যদি অবজেক্টের রেফারেন্স গণনা 0 এ চলে যায় তবে আপনি এখনও এখানে এটি নির্দেশ করতে পারেন, এটি মেমরি থেকে বিচ্ছিন্ন হয়ে যাবে।

উপরের লিঙ্কটিতে দুর্বল এবং শক্তিশালী সম্পর্কিত উভয়ই ভাল তথ্য রয়েছে


1
আপনি যদি এই এনএসএসটিংটিকে কেবলমাত্র নিজের শ্রেণীর মধ্যে অভ্যন্তরীণভাবে ব্যবহার করছেন তবে আপনার কোনও সম্পত্তির প্রয়োজন নেই কেবল আপনি এটি একটি আইভিআর তৈরি করতে পারেন এবং যদি আপনি এটির পরামর্শ দেওয়ার চেয়ে অন্য কোনও ক্লাসে ব্যবহার করছেন (শক্তিশালী, অনুলিপি)।
অঙ্কিত শ্রীবাস্তব

1
আপনি অ্যাসাইন সম্পত্তিটি মিস করছেন।
এমএসকেডব্লিউ

10
nonatomicএর অর্থ এটি এক সাথে একাধিক থ্রেড দ্বারা অ্যাক্সেস করা উচিত নয় । ডিফল্টটি atomicএটি থ্রেডকে নিরাপদ করে তোলে।
wcochran

1
এটি কিছুটা বিড়বিড় করে বলা যায় যে এতকাল পরে ননোটমিকের সংজ্ঞাটি এখনও ভুল, এবং পরমাণুর সাথে সাদৃশ্যপূর্ণ। আমি বিস্মিত হই যে বিগত পাঁচ বছরে কত লোক এটি ব্যবহার করেছে এবং ভুল ধারণা অর্জন করেছে। @Wcochran যা বলেছিল তা সঠিক ছিল। ননোটমিকের অর্থ এই যে পয়েন্টারে অ্যাক্সেস পরমাণুভাবে পরিচালিত হয় না এবং তাই থ্রেডও নিরাপদ নয়। অ-প্রাকৃতিক বিষয় হিসাবে আমি এটি যেভাবে বুঝতে পারি তা হ'ল এটির ওজন কম।
জন বুশনেল

1
@ জনবুষেলের মন্তব্য ছাড়াও এই উত্তরে আরও অনেক ত্রুটি এবং ভুল রয়েছে। এটির বয়সও ভাল হয় নি, তেমনি historicalতিহাসিকও। আপনি যদি এই প্রশ্নের উত্তর খুঁজতে চান তবে অন্য কোথাও যান।
সিআরডি 5

45

nonatomic বৈশিষ্ট্যটি বলে যে অবজেক্টটি থ্রেড নিরাপদ নয় যার অর্থ যদি কোনও ভিন্ন থ্রেড খারাপ জিনিস ঘটতে পারে তার চেয়ে এই বিষয়টিকে অ্যাক্সেস করার চেষ্টা করে তবে এটি পারমাণবিক সম্পত্তির চেয়ে অনেক দ্রুত।

strongএআরসি দিয়ে ব্যবহৃত হয় এবং এটি কোনও বস্তুর ধরে রাখার গণনা সম্পর্কে চিন্তা না করে মূলত আপনাকে সহায়তা করে। আপনি যখন এটি সম্পন্ন করবেন তখন এআরসি আপনাআপনি এটি আপনার জন্য প্রকাশ করে the কীওয়ার্ডটি ব্যবহার করার strongঅর্থ হ'ল আপনি এই অবজেক্টটির মালিক।

weakমালিকানাটির অর্থ হ'ল এটি আপনার নিজস্ব নয় এবং এটি কেবল অবজেক্টটিকে অবধি ট্র্যাক করে রাখে যতক্ষণ না অবজেক্টটিকে স্থির করার জন্য নির্ধারিত করা হয়, দ্বিতীয় অবজেক্টটি প্রকাশের সাথে সাথে এটি হারাতে থাকে তার মান হয়। যেমন যেমন obj.a=objectB;ব্যবহৃত হয় এবং একটিতে দুর্বল সম্পত্তি থাকে তবে এর মানটি কেবলমাত্র বৈধ হবে যতক্ষণ না অবজেক্টবি স্মৃতিতে থেকে যায়।

copyসম্পত্তি খুব ভাল এখানে ব্যাখ্যা করা হয়

strong,weak,retain,copy,assignপারস্পরিক একচেটিয়া তাই আপনি এগুলিকে একটি একক বস্তুতে ব্যবহার করতে পারবেন না ... "ঘোষিত বৈশিষ্ট্যগুলি" বিভাগটি পড়ুন

আশা করি এটি আপনাকে কিছুটা সাহায্য করবে ...


কেন শক্তিশালী, দুর্বল, ধরে রাখা, অনুলিপি করুন, পারস্পরিক একচেটিয়া নিয়োগ করুন
vinoth.kumar

nonatomicকেবলমাত্র কোনও বর্জন প্রয়োগ করা হয়নি means এর অর্থ এই নয় যে অ্যাক্সেস থ্রেড নিরাপদ নয়। এটি এমন একটি বাস্তবায়ন বিশদ যা atomicবনাম nonatomicক্যাপচার করে না।
বুবুম

@ ববম আপনি কোনও বর্জন এবং থ্রেড নিরাপদ নয় এর মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন ..?
অঙ্কিত শ্রীবাস্তব

1
থ্রেড এ থ্রেড বি কে কোডের পথে নামা থেকে থামিয়ে দিলে @ অঙ্কিতস্রাইভাস্তব বর্জন হয়। যদি সেই কোড পাথটি একাধিক থ্রেড থেকে কার্যকর করার জন্য নিরাপদ থাকে, তবে বাদ পড়ার দরকার নেই। থ্রেড নিরাপদ নয় মানে কোড পাথ অপরিবর্তিত ফলাফল দিতে পারে যদি A এবং B একযোগে এটি নীচে চলে যায়। এটি হ'ল বর্জন কিছু থ্রেডকে নিরাপদ করতে ব্যবহার করা যেতে পারে তবে থ্রেড সুরক্ষার জন্য একচেটিয়া - অ-সমবর্তী - কার্যকরকরণের প্রয়োজন হয় না।
বুবুম

17

এই লিঙ্কটি বিরতি আছে

http://clang.llvm.org/docs/AutomaticReferenceCounting.html#ownership.spelling.property

অ্যাসাইন করা বোঝায় __unsafe_unretained মালিকানা।

অনুলিপি __ স্ট্রং এর মালিকানা বোঝায়, পাশাপাশি সেটারে কপির শব্দার্থবিজ্ঞানের স্বাভাবিক আচরণ।

ধরে রাখা বোঝায় _ স্ট্রিং মালিকানা।

শক্তিশালী বোঝায় _ স্ট্রিং মালিকানা।

অনিরাপদ_অনরক্ষিত বোঝায় __unsafe_ অযৌক্তিকৃত মালিকানা।

দুর্বল বোঝায় __ উইকেটের মালিকানা।


অ্যাসাইন সম্পত্তিটি শুধুমাত্র আইভার এবং মানগুলির জন্য ব্যবহৃত হয় না? তাহলে কেন এটি অনিরাপদ এবং কেন এটি অপরিবর্তিত তা নোট করার প্রয়োজন আছে?
এমএসকেডব্লিউ

9

দুর্দান্ত উত্তর! একটি বিষয় যা আমি গভীরভাবে স্পষ্ট করে বলতে চাই তা হ'ল nonatomic/ atomic। ব্যবহারকারীর বুঝতে হবে যে এই সম্পত্তি - "পারমাণবিকতা" কেবলমাত্র গুনের রেফারেন্সে ছড়িয়ে পড়ে এটির সামগ্রীগুলিতে নয়। অর্থাত atomicপয়েন্টারটি পড়ার / সেট করার জন্য ব্যবহারকারীর পারমাণবিকতার গ্যারান্টি দিবে এবং কেবলমাত্র বৈশিষ্ট্যের কাছে পয়েন্টার। উদাহরণ স্বরূপ:

@interface MyClass: NSObject
@property (atomic, strong) NSDictionary *dict;
...

এক্ষেত্রে এটি গ্যারান্টিযুক্ত যে প্রতিটির পয়েন্টারটি dictবিভিন্ন থ্রেড দ্বারা পরমাণু পদ্ধতিতে পড়া / সেট করা হবে। তবে dictনিজেই ( অভিধানটির dictদিকে নির্দেশ করা অভিধানটি) এখনও থ্রেড অনিরাপদ , অর্থাত্ অভিধানে সমস্ত পড়া / যুক্ত অপারেশনগুলি এখনও থ্রেড অনিরাপদ।

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

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