আইওএস 5 এর শক্তিশালী এবং দুর্বল স্টোরেজের ব্যাখ্যা


114

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

আমি ডকুমেন্টেশনটি পড়েছি : এআরসি -তে রূপান্তরকরণ - এটি আইওএস 4 রক্ষণ, বরাদ্দকরণ এবং প্রকাশের শর্তাদি উল্লেখ করে; যা আমাকে বিভ্রান্ত করে। তারপরে আমি ওপেন ইউ সিএস 193 পি তে সন্ধান করব, যেখানে এটি শক্তিশালী এবং দুর্বলকে পৃথক করে:

শক্তিশালী : "যতক্ষণ না আমি এটির দিকে আর ইশারা না করি এ পর্যন্ত এটি স্তূপে রাখুন"
দুর্বল : "যতক্ষণ না অন্য কেউ দৃ strongly়তার সাথে এটি দেখায়"

দুটি সংজ্ঞা কি অভিন্ন নয় = যদি পয়েন্টারটি আর কোনও বস্তুর দিকে নির্দেশ না করে তবে অবজেক্টটি ধারণ করে থাকা মেমরিটি মুক্ত করে? আমি পয়েন্টার, গাদা, বরাদ্দ বা স্মৃতিচারণের ধারণাটি বুঝতে পারি - তবে শক্ত এবং দুর্বল মধ্যে পার্থক্য কী?


মেমরি পরিচালনার মডেলটি এখনও আপনি প্রাসঙ্গিক যদিও আপনি আরসি ব্যবহার করছেন। আপনাকে এখনও রেফারেন্স গণনা বুঝতে হবে, আপনাকে কেবল এটি ম্যানুয়ালি করতে হবে না। সুতরাং আপনার শেষ অনুচ্ছেদটি একটি অযৌক্তিক চাহিদা।
jrturton

উত্তর:


509

পার্থক্যটি হ'ল কোনও অবজেক্টের কোনও শক্ত পয়েন্টার না থাকামাত্রই তা বাতিল হয়ে যাবে। এমনকি যদি দুর্বল পয়েন্টারগুলি এটি নির্দেশ করে, একবার শেষ শক্তিশালী পয়েন্টারটি শেষ হয়ে গেলে, বস্তুটি বাতিল হয়ে যাবে, এবং সমস্ত অবশিষ্ট দুর্বল পয়েন্টার শূন্য হয়ে যাবে।

সম্ভবত একটি উদাহরণ ক্রমযুক্ত।

কল্পনা করুন যে আমাদের অবজেক্টটি একটি কুকুর, এবং কুকুরটি পালাতে চায় (বিচ্ছিন্ন হোক)।

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

অন্যদিকে দুর্বল পয়েন্টারগুলি হ'ল ছোট বাচ্চাদের মতো কুকুরটির দিকে ইশারা করে এবং বলে "দেখো! একটি কুকুর!" কুকুরটি যতক্ষণ না পীড়িত থাকে ততক্ষণ ছোট বাচ্চারা কুকুরটিকে দেখতে পাবে এবং তারা এখনও এটি দেখিয়ে দেবে। যত তাড়াতাড়ি সমস্ত leashes বিচ্ছিন্ন করা হয়, যদিও, কুকুর যতটা ছোট বাচ্চা এর দিকে ইশারা করছে তা পালিয়ে যায়।

যত তাড়াতাড়ি শেষ শক্তিশালী পয়েন্টার (ছোঁয়া) কোনও বস্তুর দিকে নির্দেশ না করে, অবজেক্টটি বাতিল হয়ে যাবে এবং সমস্ত দুর্বল পয়েন্টার শূন্য হয়ে যাবে।


2
এটি অ্যাপল-এ ম্যালকম ক্রফোর্ডের একটি উপমা কয়েক বছর আগে দিয়েছে based তিনি কোথায় পেলেন তা জানেন না।
বিজে হোমার

আমার মনে আছে কোনও বইতে অনুরূপ কিছু (প্রাক-চাপ) পড়েছিল, মনে হয় এটি হিলিগাস ছিল, তবে তখন সে অন্য কোথাও থেকে এটি পেতে পারত ... যদিও এটি একটি ভাল!
jrturton

14
+1 দুর্দান্ত উদাহরণ। এটি কীভাবে লীশগুলি বজায় রাখা / মুক্ত করা যায় সে সম্পর্কে হিলগাসের উদাহরণটির একটি বিকাশ, তবে আমি দৃ ad় / দুর্বলদের জন্য এই অভিযোজনটি পছন্দ করি।
ডেভ দেলং

2
@ ডেভিডলং: আচ্ছা, এআরসি দিয়ে তারা 10.6 এ অবৈধ । আপনি এগুলি মোটেই ব্যবহার করতে পারবেন না। সুতরাং যে বিন্দু একটি অপ্রাসঙ্গিক পয়েন্ট।
বিজে হোমার

5
আর একটি ভাল হিলিয়াম বেলুনগুলি: যতক্ষণ না কমপক্ষে একটি স্ট্রিং রাখা হয় ততক্ষণ এটি ভেসে যায় না। "মালিকানা" রক্ষণ / প্রকাশের মাধ্যমে পরিচালিত হয় তা লোকেরা ভুলে যাওয়ার পক্ষে জঞ্জাল / বেলুন উপমাগুলিও ভাল।
স্টিভ ওয়েলার

34

দুটি সংজ্ঞা এক নয়।

একেবারে না. আপনি যে দুটি সংজ্ঞাটি নির্দেশ করেছেন তার মূল পার্থক্য হ'ল "যতক্ষণ অন্য কারও হিসাবে"। এটি "অন্য কেউ" এটি গুরুত্বপূর্ণ।

নিম্নোক্ত বিবেচনা কর:

__strong id strongObject = <some_object>;
__weak id weakObject = strongObject;

এখন আমরা দুটি পয়েন্টার পেয়েছি <some_object>, একটি শক্তিশালী এবং একজন দুর্বল। যদি আমরা strongObjectএটি nilপছন্দ করি:

strongObject = nil;

তারপরে যদি আপনি বর্ণিত বিধিগুলি অনুসরণ করেন তবে আপনি নিজেকে এই প্রশ্নগুলি জিজ্ঞাসা করবেন:

  1. শক্তিশালী: "যতক্ষণ না আমি এটির দিকে ইশারা না করি ততক্ষণ এটিকে স্তূপে রাখুন"

    strongObjectআর কোন ইশারা না <some_object>। সুতরাং আমাদের এটি রাখার দরকার নেই।

  2. দুর্বল: "যতক্ষণ অন্য কেউ দৃ strongly়তার সাথে এটি দেখায় ততক্ষণ এটি রাখুন"

    weakObjectএখনও পয়েন্ট <some_object>। তবে যেহেতু অন্য কেউ এটি দেখায় না, এই বিধিটিরও অর্থ হল যে আমাদের এটি রাখার দরকার নেই।

ফলাফলটি হ'ল <some_object>বিলোপযুক্ত এবং যদি আপনার রানটাইম এটি সমর্থন করে (সিংহ এবং আইওএস 5 এর উপরে) তবে weakObjectস্বয়ংক্রিয়ভাবে সেট হয়ে যাবে nil

এখন বিবেচনা করুন যদি আমরা weakObjectএটি nilপছন্দ করি তবে কি হয় :

weakObject = nil;

তারপরে যদি আপনি বর্ণিত বিধিগুলি অনুসরণ করেন তবে আপনি নিজেকে এই প্রশ্নগুলি জিজ্ঞাসা করবেন:

  1. শক্তিশালী: "যতক্ষণ না আমি এটির দিকে ইশারা না করি ততক্ষণ এটিকে স্তূপে রাখুন"

    strongObjectনির্দেশ করে <some_object>। সুতরাং আমাদের এটি রাখা দরকার।

  2. দুর্বল: "যতক্ষণ অন্য কেউ দৃ strongly়তার সাথে এটি দেখায় ততক্ষণ এটি রাখুন"

    weakObjectনির্দেশ না <some_object>

ফলাফলের যে <some_object>হয় না deallocated কিন্তু weakObjectহতে হবে nilপয়েন্টার।

[দ্রষ্টব্য যে সমস্ত কিছু ধরে নিয়েছে <some_object>তা অন্য কোথাও কোথাও / "আটকানো" থাকার অন্য কোনও উপায়ে ইঙ্গিত করা হয়নি]


1
সুতরাং শক্তিশালী এবং দুর্বল মধ্যে প্রধান পার্থক্য হ'ল দৃ objects়ভাবে পয়েন্ট করা অবজেক্টের ক্ষয়ক্ষতি স্বয়ংক্রিয়ভাবে সমস্ত সম্পর্কিত দুর্বল পয়েন্টার নিঃশব্দ হবে। এবং দুর্বল পয়েন্টারটির জন্য কোনও কিছুতে নির্দেশ করার জন্য, সর্বদা একটি শক্ত পয়েন্টার থাকে। যদি তা হয় তবে প্রধান অ্যাপ্লিকেশন অবজেক্টটি দৃ strongly়ভাবে নির্দেশ করতে হবে?
কেএমসি

কোনও দুর্বল পয়েন্টারটির জন্য বৈধ কিছুতে নির্দেশ করতে হবে তবে হ্যাঁ একটি শক্ত পয়েন্টার থাকতে হবে ter আইওএস 5 এবং সিংহ দুর্বল রেফারেন্সগুলিকে অটো-নিলিং সমর্থন করে এবং আপনি যা বলে তা পেয়ে যান এই বিষয়টি যুক্ত করুন। আইওএস 4 এর রানটাইম যদিও এটি সমর্থন করে না । "মূল অ্যাপ্লিকেশন অবজেক্ট" আমি ধরে নিচ্ছি আপনি কি সেই UIApplicationঅবজেক্টটি বোঝাচ্ছেন ? এটির অভ্যন্তরীণ কাজগুলি দৃ .়তার সাথে উল্লেখ করা হবে UIKit- তবে আপনাকে এটি সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই।
ম্যাটজগ্লোলোয়

আমি মনে করি আপনি "strongObjectPointer" এর মতো শব্দটি "strongObject" এর পরিবর্তে ব্যবহার করতে পারেন। সুতরাং প্রোগ্রামিং নতুন ব্যক্তিদের আরও ভাল অর্থ হবে। @ বিজে হোমার পোস্টে মিঃম্যাট.আন্টারটিস্টিং ভাল লাগছে :)
বিজয়- অ্যাপল- ডেভ.ব্লগস্পট.কম

2

শক্তিশালী

  1. সম্পত্তি এবং নির্ধারিত মানের মধ্যে মালিকানা তৈরি করে।
  2. এটিআরসি তে অবজেক্ট প্রোপার্টিটির জন্য এটি ডিফল্ট তাই এটি আপনাকে রেফারেন্স গণনা সম্পর্কে উদ্বিগ্ন হতে দেয় এবং রেফারেন্সটি স্বয়ংক্রিয়ভাবে প্রকাশ করতে দেয় না।
  3. এটি ধরে রাখার জন্য প্রতিস্থাপন। আমরা যদি ব্যবহার করি তবে কেবল রক্ষণ হিসাবে ব্যবহার করতে হবে।

দুর্বল

  1. সম্পত্তি এবং নির্ধারিত মানের মধ্যে অ-মালিকানা তৈরি করে।
  2. প্যারেন্ট অবজেক্টে শক্তিশালী ব্যবহার করা হয় এবং পিতা-মাতাকে ছেড়ে দেওয়া হলে শিশু অবজেক্টে দুর্বল ব্যবহৃত হয় তবে চাইল্ড অবজেক্ট রেফারেন্সও শূন্য থাকে
  3. এটি ধরে রাখার চক্র প্রতিরোধে সহায়তা করে।
  4. আবর্জনা সংগ্রহকারী দ্বারা সংগ্রহ করার সময় এটি রেফারেন্স করা অবজেক্টটি সুরক্ষা দেয় না।
  5. দুর্বল মূলত নির্ধারিত হয়, সম্পত্তি অপরিবর্তিত করা হয়।

রক্ষণ চক্রটি সাধারণত কী তা এখানে উল্লেখ করার মতো। আমাদের দুটি অবজেক্ট রয়েছে: অবজেক্ট এ এবং অবজেক্ট বি। অবজেক্ট এ এর ​​সাথে বি অবজেক্টের শক্ত রেফারেন্স রয়েছে এবং অবজেক্ট বি এর অবজেক্ট এ এর ​​শক্ত রেফারেন্স আছে অন্য কোন কিছুর সাথে এ বা বি অবজেক্টের শক্ত রেফারেন্স নেই
বোরো

2

আরেকটি উদাহরণ: ছাত্র একটি হল Object, অনুমিত যে সে / তিনি স্নাতক পারেন ( deallocate) যতদিন সে / তিনি সমস্ত কোর-কোর্স সমাপ্ত ( strong pointers), কোন ব্যাপার যদি সে / তিনি ঐচ্ছিক-কোর্স নিতে ( weak pointers)। অন্য কথায়: শক্তিশালী পয়েন্টার হ'ল এটির অবনতির একমাত্র কারণ Object


1

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


1

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

হার্ডওয়্যারের জন্য, দুর্বল বা শক্তিশালী নির্দেশ করে যে ক্রমযুক্ত ধারাবাহিকতার জন্য সমর্থন আছে কিনা is

[এসসি এর অর্থ হ'ল] ... যে কোনও মৃত্যুদন্ড কার্যকর করার ফলাফল একই রকম হয় যে সমস্ত প্রসেসরের ক্রিয়াকলাপ কিছু অনুক্রমিক ক্রমে সম্পাদন করা হয়েছিল এবং প্রতিটি পৃথক প্রসেসরের ক্রিয়াকলাপ তার প্রোগ্রাম দ্বারা নির্দিষ্ট ক্রমে এই ক্রমটিতে প্রদর্শিত হয়। - ল্যাম্পোর্ট, 1979

ডাব্লুটিএফ এর কি স্মৃতিশক্তি আছে? এটি বোঝাচ্ছে যে বিভিন্ন প্রসেসরের দ্বারা চলকগুলিতে লেখার জন্য সমস্ত প্রসেসরের একই ক্রমে দেখতে হবে। শক্তিশালী মডেল সহ হার্ডওয়্যারে এটির গ্যারান্টিযুক্ত। দুর্বল মডেল সহ হার্ডওয়ারে, এটি নয়।

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

যদিও এটি সত্য যে আর্ম 8 + অর্জন / প্রকাশের জন্য সুস্পষ্ট সমর্থন দিয়ে একে একে একে একে পুরোপুরি পরিবর্তন করে, লিগ্যাসি সফ্টওয়্যার এই সমর্থনটি ব্যবহার করে না। লিগ্যাসি সফ্টওয়্যারটিতে তিনটি ফোন ওএস এবং তাদের উপর চালিত সমস্ত কিছু এবং সেই সাথে সংকলক এবং লাইব্রেরিগুলি আপডেট হওয়া অবধি অন্তর্ভুক্ত রয়েছে।

এই বিষয়টির বর্ধিত পরীক্ষার জন্য আমি আপনাকে অনিবার্য ভেষজ সুত্রে উল্লেখ করি ।

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