উভয় weak
এবং unowned
রেফারেন্স রেফারেন্সযুক্ত strong
বস্তুর উপর একটি হোল্ড তৈরি করে না (ওরফে তারা রেটযুক্ত বস্তুটিকে অবনমিত হতে আটকের জন্য রেন্ট কাউন্ট বাড়ায় না)।
তবে দুটি কীওয়ার্ড কেন? এই পার্থক্যটির সাথে সত্যতা আছে যে Optional
প্রকারগুলি সুইফট ভাষা অন্তর্নির্মিত। তাদের সম্পর্কে দীর্ঘ গল্প সংক্ষিপ্ত: typesচ্ছিক প্রকারগুলি মেমরির সুরক্ষা সরবরাহ করে (এটি সুইফটের নির্মাতার নিয়মের সাথে সুন্দরভাবে কাজ করে - যা এই সুবিধা দেওয়ার জন্য কঠোর)।
একটি weak
রেফারেন্স এটির সম্ভাবনা তৈরি করার অনুমতি দেয় nil
(রেফারেন্সযুক্ত অবজেক্টটি বিলোপযুক্ত হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে ঘটে) সুতরাং আপনার সম্পত্তির প্রকারটি অবশ্যই beচ্ছিক হতে হবে - সুতরাং আপনি, প্রোগ্রামার হিসাবে এটি ব্যবহার করার আগে আপনাকে এটি পরীক্ষা করতে বাধ্য (মূলতঃ সংকলক আপনাকে যতটা সম্ভব নিরাপদ কোড লিখতে বাধ্য করে)।
একটি unowned
রেফারেন্স অনুমান করে যে এটি কখনই nil
তার জীবদ্দশায় পরিণত হবে না । আরম্ভের সময় একটি অচেতন রেফারেন্স সেট করতে হবে - এর অর্থ এই যে রেফারেন্সটি একটি অ-.চ্ছিক প্রকার হিসাবে সংজ্ঞায়িত করা হবে যা চেক ছাড়াই নিরাপদে ব্যবহার করা যেতে পারে। যদি কোনওভাবে অবজেক্টটিকে উল্লেখ করা হচ্ছে তা নির্বিঘ্ন করা হয়, তবে অযৌক্তিক রেফারেন্স ব্যবহার করা হলে অ্যাপটি ক্র্যাশ হয়ে যায়।
থেকে অ্যাপল ডক্স :
যখনই তার রেফারেন্সটি তার জীবদ্দশায় কোনও সময়ে শূন্য হয়ে যায় তখনই এটি দুর্বল রেফারেন্স ব্যবহার করুন। বিপরীতক্রমে, অবিকৃত রেফারেন্সটি ব্যবহার করুন যখন আপনি জানেন যে সূত্রটি আরম্ভের সময় সেট হয়ে গেলে এটি কখনই শূন্য হয় না।
দস্তাবেজগুলিতে কয়েকটি উদাহরণ রয়েছে যা ধরে রাখার চক্র এবং কীভাবে সেগুলি ভাঙতে পারে সে সম্পর্কে আলোচনা করে। এই সমস্ত উদাহরণ ডক্স থেকে নেওয়া হয়েছে ।
weak
কীওয়ার্ডের উদাহরণ :
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
weak var tenant: Person?
}
এবং এখন, কিছু ASCII শিল্পের জন্য (আপনার ডক্সগুলি দেখতে যাওয়া উচিত - তাদের সুন্দর ডায়াগ্রাম রয়েছে):
Person ===(strong)==> Apartment
Person <==(weak)===== Apartment
Person
এবং Apartment
উদাহরণস্বরূপ একটি অবস্থা যেখানে দুই বৈশিষ্ট, এই দুই ধরনের শূন্য হতে অনুমোদিত, একটি শক্তিশালী রেফারেন্স চক্র বিকল হওয়ার সম্ভাবনা আছে দেখায়। এই দৃশ্যের একটি দুর্বল রেফারেন্স সহ সেরা সমাধান করা হয়েছে। উভয় সত্তা অন্যের উপর দৃ a় নির্ভরশীলতা ছাড়াই বিদ্যমান থাকতে পারে।
unowned
কীওয়ার্ডের উদাহরণ :
class Customer {
let name: String
var card: CreditCard?
init(name: String) { self.name = name }
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) { self.number = number; self.customer = customer }
}
এই উদাহরণে, Customer
মে এর একটি থাকতে পারে বা নাও থাকতে পারে CreditCard
তবে একটি এর সাথে CreditCard
সর্বদা যুক্ত থাকবেCustomer
। এটি উপস্থাপনের জন্য, Customer
শ্রেণীর একটি alচ্ছিক সম্পত্তি রয়েছে card
তবে CreditCard
শ্রেণীর একটি অ-alচ্ছিক (এবং অবিকৃত) customer
সম্পত্তি রয়েছে।
Customer ===(strong)==> CreditCard
Customer <==(unowned)== CreditCard
Customer
এবং CreditCard
উদাহরণস্বরূপ একটি অবস্থা যেখানে এক সম্পত্তি যে শূন্য হতে অনুমোদিত হবে এবং অন্য সম্পত্তি যে শূন্য হতে পারে না একটি শক্তিশালী রেফারেন্স চক্র বিকল হওয়ার সম্ভাবনা থাকে শো। এই দৃশ্যটি অনাবৃত রেফারেন্স দিয়ে সবচেয়ে ভাল সমাধান করা হয়েছে।
অ্যাপল থেকে নোট:
দুর্বল রেফারেন্সগুলি অবশ্যই ভেরিয়েবল হিসাবে ঘোষণা করতে হবে, ইঙ্গিত করতে যে রানটাইমের সময় তাদের মান পরিবর্তন হতে পারে। একটি দুর্বল রেফারেন্সকে ধ্রুবক হিসাবে ঘোষণা করা যায় না।
তৃতীয় দৃশ্যাবলীও রয়েছে যখন উভয় বৈশিষ্ট্যের সর্বদা একটি মান থাকা উচিত এবং আরম্ভ করার পরে সম্পত্তির কোনওটিই শূন্য করা উচিত নয়।
ক্লোজারগুলির সাথে কাজ করার সময় এড়াতে ক্লাসিক ধরে রাখা চক্রের দৃশ্যও রয়েছে।
এর জন্য, আমি আপনাকে অ্যাপল ডক্স পরিদর্শন করতে , বা বইটি পড়তে উত্সাহিত করছি ।