objective c এআরসি ব্যবহার করার সময় আমি কি ডিএলওকে বৈশিষ্ট্যে নিযুক্ত করব?




objective-c ios (2)

শুধু বিপরীত উত্তর দিতে ...

সংক্ষিপ্ত উত্তর : না, আপনি এআরসি অধীনে dealloc মধ্যে স্বয়ংক্রিয় সংশ্লেষিত বৈশিষ্ট্য খুঁজে বের করতে হবে না। এবং আপনি init মধ্যে যারা জন্য Setter ব্যবহার করতে হবে না।

দীর্ঘ উত্তর : আপনি এআরসি অধীনে এমনকি dealloc মধ্যে কাস্টম সংশ্লেষিত বৈশিষ্ট্য খুঁজে বের করা উচিত । এবং আপনি init মধ্যে যারা জন্য Setter ব্যবহার করা উচিত।

বিন্দু আপনার কাস্টম-সংশ্লেষিত বৈশিষ্ট্য নিরাপদ এবং অসম্মতি সংক্রান্ত সমান্তরাল হওয়া উচিত।

একটি টাইমার জন্য একটি সম্ভাব্য Setter:

-(void)setTimer:(NSTimer *)timer
{
    if (timer == _timer)
        return;

    [timer retain];
    [_timer invalidate];
    [_timer release];
    _timer = timer;
    [_timer fire];
}

একটি স্ক্রলভিউ, টেবিলভিউ, ওয়েবউইউউ, টেক্সটফিল্ডের জন্য একটি সম্ভাব্য সেট্টার ...:

-(void)setScrollView:(UIScrollView *)scrollView
{
    if (scrollView == _scrollView)
        return;

    [scrollView retain];
    [_scrollView setDelegate:nil];
    [_scrollView release];
    _scrollView = scrollView;
    [_scrollView setDelegate:self];
}

একটি কেভিও সম্পত্তি জন্য একটি সম্ভাব্য Setter:

-(void)setButton:(UIButton *)button
{
    if (button == _button)
        return;

    [button retain];
    [_button removeObserver:self forKeyPath:@"tintColor"];
    [_button release];
    _button = button;
    [_button addObserver:self forKeyPath:@"tintColor" options:(NSKeyValueObservingOptions)0 context:NULL];
}

তারপরে আপনাকে dealloc , didReceiveMemoryWarning , viewDidUnload , ... এর জন্য কোনও কোড অনুলিপি করতে হবে না এবং আপনার সম্পত্তি নিরাপদে প্রকাশ করা যেতে পারে। আপনি যদি dealloc বৈশিষ্ট্যের nil আউট সম্পর্কে চিন্তিত ছিল, তাহলে এটি আপনি আপনার setters আবার চেক সময় হতে পারে।

আমি iOS 5 এ স্বয়ংক্রিয় রেফারেন্স কাউন্টিং শিখতে চেষ্টা করছি। এখন এই প্রশ্নের প্রথম অংশটি সহজ হওয়া উচিত:

  1. এআরসি ব্যবহার করার সময় আমার ডিএলওকে স্পষ্টভাবে মুক্ত-সম্পত্তি বিবৃতি লেখার দরকার নেই কি এটা সঠিক? অন্য কথায়, এটা কি সত্য যে নীচের একটি স্পষ্ট dealloc প্রয়োজন হয় না ?

    @interface MyClass : NSObject
    @property (strong, nonatomic) NSObject* myProperty;
    @end
    
    @implementation MyClass
    @synthesize myProperty;
    @end
  2. আমার পরবর্তী এবং আরো গুরুত্বপূর্ণ প্রশ্ন ট্রানজিউশনিং থেকে এআরসি রিলিজ নোট নথির একটি লাইন থেকে আসে:

    আপনাকে ইনস্ট্যান্স ভেরিয়েবলগুলি প্রকাশ করতে হবে না (প্রকৃতপক্ষে তা করতে পারবেন না), তবে আপনাকে সিস্টেম ক্লাসগুলিতে এবং নিজের এআরসি ব্যবহার করে সংকলিত অন্যান্য কোডগুলিতে [স্বয়ং সেট ডিল্যাগেট: nil] আহ্বান করতে হবে।

    এটি প্রশ্ন করে: আমি কিভাবে জানবো কোন সিস্টেম ক্লাসগুলি এআরসি সংকলিত হয় না? কখন আমার নিজের ডিলোক তৈরি করা উচিত এবং স্পষ্টভাবে দৃঢ়ভাবে স্থির রাখার জন্য বৈশিষ্ট্যগুলি নিযুক্ত করা উচিত? আমি বৈশিষ্ট্যাবলী ব্যবহৃত সব NS এবং UI ফ্রেমওয়ার্ক ক্লাস স্পষ্ট deallocs প্রয়োজন অনুমান করা উচিত?

ম্যানুয়াল রেফারেন্স ট্র্যাকিং ব্যবহার করার সময় সম্পত্তির ব্যাকিং আইভার মুক্ত করার পদ্ধতিগুলিতে SO এবং অন্য কোথাও তথ্যের প্রচুর পরিমাণে তথ্য রয়েছে তবে এটি এআরসি ব্যবহার করার সময় তুলনামূলকভাবে কম।


সংক্ষিপ্ত উত্তর : না, আপনি এআরসি অধীন dealloc মধ্যে বৈশিষ্ট্য খুঁজে বের করতে হবে না।

দীর্ঘ উত্তর : আপনি ম্যানুয়াল মেমরি ম্যানেজমেন্ট এমনকি dealloc মধ্যে বৈশিষ্ট্য খুঁজে না করা উচিত।

এমআরআরে, আপনার ivars মুক্তি উচিত। বৈশিষ্ট্যগুলি বাদ দেওয়ার অর্থ হল সেটারগুলিকে কলিং করা, যা কোডটি আহ্বান করতে পারে যা এটি dealloc স্পর্শ করতে পারে না (উদাহরণস্বরূপ যদি আপনার বর্গ, বা একটি উপশ্রেণী, dealloc ওভাররাইড করে)। একইভাবে এটি KVO বিজ্ঞপ্তি ট্রিগার করতে পারে। Ivar রিলিজ পরিবর্তে এই অনাকাঙ্ক্ষিত আচরণ এড়ানো।

এআরসি এ, সিস্টেমটি স্বয়ংক্রিয়ভাবে আপনার জন্য কোনও ivars রিলিজ করে, তাই যদি আপনি যা করছেন তা আপনাকে dealloc বাস্তবায়ন dealloc হবে না। যাইহোক, যদি আপনার কোনও অ-বস্তু ivars থাকে যা বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হয় (উদাহরণস্বরূপ বরাদ্দ করা বাফারগুলি যেগুলি আপনাকে free() করতে হবে free() ), তখনও আপনাকে dealloc সাথে মোকাবিলা করতে হবে।

অধিকন্তু, যদি আপনি কোনও বস্তুর প্রতিনিধির হিসাবে নিজেকে সেট করেছেন, তবে আপনাকে সেই সম্পর্কটি dealloc অনির্বাচিত করা উচিত (এটি dealloc জন্য বিট হয় [obj setDelegate:nil] )। এআরসি সংকলিত নয় এমন ক্লাসগুলিতে এটি করার বিষয়ে নোটটি দুর্বল বৈশিষ্ট্যগুলির দিকে মনোযোগ দেয়। যদি শ্রেণিটি স্পষ্টভাবে তার delegate সম্পত্তিকে weak হিসাবে চিহ্নিত করে তবে আপনাকে এটি করতে হবে না, কারণ দুর্বল বৈশিষ্ট্যগুলির প্রকৃতি মানে এটি আপনার জন্য উন্মুক্ত হয়ে যাবে। তবে যদি সম্পত্তিটি চিহ্নিত করা হয় তবে আপনার dealloc এটিকে সরিয়ে ফেলা উচিত নয়, অন্যথায় dealloc ঝুঁকিপূর্ণ পয়েন্টার দিয়ে রেখে দেওয়া হবে এবং এটি তার প্রতিনিধিকে বার্তা পাঠানোর চেষ্টা করলে সম্ভবত ক্র্যাশ হবে। মনে রাখবেন যে এটি শুধুমাত্র প্রতিনিধিদের মতো অপরিবর্তিত সম্পর্কগুলিতে প্রযোজ্য।





automatic-ref-counting