উদ্দেশ্য সি - বরাদ্দ, অনুলিপি, পুনরুদ্ধার


84

আমি অবজেক্টিভ সি-তে নতুন I আমার দুটি প্রাথমিক প্রশ্ন আছে:

  1. কেউ কি কিছু উপমা দিয়ে নিয়োগ, অনুলিপি এবং ধরে রাখতে পার্থক্যটি ব্যাখ্যা করতে পারে?
  2. পয়েন্টার ভেরিয়েবল ফিরিয়ে দেয় এমন কোনও ফাংশন আপনি কীভাবে পরিচালনা করবেন এবং আপনি কীভাবে কোনও রিটার্ন পয়েন্টারের মাধ্যমে বার্তা প্রেরণ করবেন?

উত্তর:


127

পরিবর্তিত ডকুমেন্টেশন জন্য আপডেট উত্তর

তথ্যটি এখন নথির বিভিন্ন গাইড জুড়ে ছড়িয়ে পড়েছে। প্রয়োজনীয় পড়ার তালিকা এখানে রয়েছে:

এই প্রশ্নের উত্তর এখন পুরোপুরি নির্ভর করে আপনি কোনও এআরসি-পরিচালিত অ্যাপ্লিকেশন (নতুন প্রকল্পের জন্য আধুনিক ডিফল্ট) ব্যবহার করছেন বা ম্যানুয়াল মেমরি পরিচালনা জোর করে কিনা on

বনাম দুর্বল নির্ধারণ করুন - কোনও সম্পত্তি ধরে না রেখে বা অন্যথায় এটি নিরাময়ের পরিবর্তে কোনও জিনিসের পয়েন্টার সেট করার জন্য অ্যাসাইন ব্যবহার করুন ; সম্পত্তির বিন্দুটি স্বয়ংক্রিয়ভাবে নিল করার জন্য দুর্বল ব্যবহার করুন যদি তার দ্বারা অর্পিত বস্তুটি নির্বিঘ্ন হয়। বেশিরভাগ ক্ষেত্রে আপনি দুর্বল ব্যবহার করতে চাইবেন যাতে আপনি কোনও স্থির অবজেক্ট (মেমরির ঠিকানা অবৈধ অ্যাক্সেসের অ্যাক্সেস করার চেষ্টা করছেন না) "EXC_BAD_ACCESS সঠিক পরিষ্কার-পরিচ্ছন্নতা সম্পাদন না করে আপনি " )।

বনাম কপি বজায় রাখা - ঘোষিত বৈশিষ্ট্য ব্যবহার বজায় রাখা (তাই আপনি এটিকে কেবল পুরাপুরি বাদ যাবে) ডিফল্টরূপে এবং স্বয়ংক্রিয়ভাবে বস্তুর রেফারেন্স গণনা পরিচালনা করবে কিনা অন্য বস্তুর সম্পত্তিতে এটা শূন্যে সেট নিয়োগ বা করা হয়; সুনির্দিষ্টভাবে অর্পিত বস্তুকে একটি বার্তা পাঠানোর জন্য অনুলিপি ব্যবহার করুন -copy(যা উত্তীর্ণ অবজেক্টের একটি অনুলিপি তৈরি করবে এবং সেই অনুলিপিটি সম্পত্তিটির পরিবর্তে অর্পণ করবে - দরকারী (এমনকি প্রয়োজনীয়) এমন কিছু পরিস্থিতিতে যেখানে নির্ধারিত অবজেক্টটি সেট হওয়ার পরে সংশোধিত হতে পারে) অন্য কোনও বস্তুর সম্পত্তি (যার অর্থ এই সম্পত্তিতেও পরিবর্তন / মিউটেশন প্রযোজ্য হবে)।


4
ধন্যবাদ দ্য আমি আপেল দেবের বুনিয়াদি পড়ি, আমার বর্তমান বিকাশের বিষয়ে স্মৃতি পরিচালনায় কঠিন সময় কাটাতে "obc_msgSend (" "ক্র্যাশ হয়ে গেছে" সুতরাং আমি কেবল সম্পত্তি সম্পর্কে আমার বোঝার সংশোধন করার চিন্তা করেছি। stackoverflow.com/questions/4506205/…
সভা বি

4
কেবলমাত্র শীর্ষস্থানীয়, উত্তরের লিঙ্কটি আপেল সাইটে একটি জেনেরিক "পৃষ্ঠা পাওয়া যায় নি" তে যায়। তারপর এটি "ম্যাক বিকাশকারী লাইব্রেরী" এই তাই উত্তর দরকারী তথ্য রয়েছে রিডাইরেক্ট stackoverflow.com/questions/2255861/...
hippeelee

4
হালনাগাদ করা এক কঠিন কারণ ডকুমেন্টেশন পরিবর্তিত হয়েছে এবং এটি আর কোনও সুবিধাজনক জায়গায় নেই। অ্যাপল ডক দলে ফিডব্যাক পাঠানো হয়েছে।
জোশুয়া নউজি

34

মেমরি ম্যানেজমেন্ট প্রোগ্রামিং গাইড আইওএস রেফারেন্স লাইব্রেরী থেকে, স্থির করুন বুনিয়াদি হয়েছে অনুলিপি করুন এবং অ্যানালজিস এবং উদাহরণ সঙ্গে বজায় রাখা।

অনুলিপি কোনও অবজেক্টের একটি অনুলিপি তৈরি করে, এবং এটি 1 টি ধরে রাখার গণনা সহ প্রদান করে you এটি এমন কোনও পদ্ধতির ক্ষেত্রে প্রযোজ্য যেখানে শব্দ অনুলিপি রয়েছে যেখানে "অনুলিপি" অবজেক্টটিকে ফেরত পাঠানো বোঝায়।

রেকর্ড একটি বস্তুর ধরে রাখার গণনা ১ দ্বারা বাড়ায় an

রিলিজ একটি অবজেক্টের ধরে রাখার গণনা ১ দ্বারা হ্রাস করে an


আপনার জবাবের জন্য ধন্যবাদ। আপনি দয়া করে ব্যাখ্যা করুন 1. ক্লাসার একটি সম্পত্তি রয়েছে - (ক্লাস বি *) ফাংশননাম; 2.ক্লাসবিতে পদ্ধতি রয়েছে - (বাতিল) সেটহাইট; ৩.ক্লাসসি ইন্টারফেস আমি ক্লাসএ * টেম্পএটিকে ধরে রাখার হিসাবে ঘোষণা করেছি। 4. কন্সট্রাক্টরে ক্লাস সি বাস্তবায়ন আমার এই বিবৃতিটি ক্লাসবি * টেম্পবি = টেম্পএ.ফংশননাম; ৫. যখন আমি টেম্পবি আরম্ভের পরবর্তী লাইনে একটি বার্তা (টেম্পি। সেটহাইট;) প্রেরণের চেষ্টা করি আমার প্রোগ্রামটি ঠিকঠাক কাজ করে।
সভা বি

Some. একই ফাংশনটি (টেম্পবি। সেটহাইট;) কে কোনও ফাংশনে আউট করা এবং একই ফাংশনটি কল করা আমার প্রোগ্রামটি obc_msgSend () এ ক্র্যাশ হয়ে যায়।
সভা বি

8
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
NSMutableArray *copiedArray = [array mutableCopy];
NSMutableArray *retainedArray = [array retain];

[retainedArray addObject:@"Retained Third"];
[copiedArray addObject:@"Copied Third"];

NSLog(@"array = %@",array);
NSLog(@"Retained Array = %@",retainedArray);
NSLog(@"Copied Array = %@",copiedArray);

array = (
    First,
    Second,
    "Retained Third"
)
Retained Array = (
    First,
    Second,
    "Retained Third"
)
Copied Array = (
    First,
    Second,
    "Copied Third"
)

4
পার্শ্ববর্তী ব্যাখ্যা আপনার উত্তরকে গুরুত্ব সহকারে উন্নতি করবে।
zx485

4
  1. বরাদ্দ

    • বরাদ্দ করা একটি ডিফল্ট সম্পত্তি বৈশিষ্ট্য
    • নির্ধারিত একটি সম্পত্তি বৈশিষ্ট্যটি কীভাবে সম্পত্তিটির সেটার বাস্তবায়ন সংশ্লেষিত করতে হয় তা সংকলককে বলে
  2. অনুলিপি:

    • অনুলিপি পরিবর্তনযোগ্য যখন কপি প্রয়োজন হয়
    • অনুলিপিটি এমন কোনও বস্তু ফেরত দেয় যা আপনাকে স্পষ্টতই আবর্জনা-সংগৃহীত পরিবেশে প্রকাশ করতে হবে (উদাহরণস্বরূপ, ডেলোক)
    • আপনি যখন অনুলিপিটি ধরে রাখছেন তখন আপনাকে এটিটি শেষ করার পরে মুক্তি দিতে হবে
  3. ধরে রাখা:

    • অ্যাসাইনমেন্টের উপর নতুন মানটি "পুনরুদ্ধার" পাঠানো উচিত এবং পুরানো মানটি "রিলিজ" প্রেরণ করা উচিত তা নির্দিষ্ট করে
    • আপনি যদি ধরে রাখেন তবে এটি শক্তির মতো অটো কাজ করবে
    • "বরাদ্দ" এর মতো পদ্ধতিগুলির মধ্যে একটি অন্তর্ভুক্ত "ধরে রাখা" অন্তর্ভুক্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.