আইওএস 5 এসডিকে স্বয়ংক্রিয় রেফারেন্স গণনা সম্পর্কে কিছু প্রশ্ন


134

আমি বর্তমানে আইপ্যাডের জন্য একটি অ্যাপ বিকাশ করছি। আইওএস ৪.২ এর জন্য বিকাশ শুরু হয়েছিল এবং আইওএস ৪.৩ এর জন্য এখন অব্যাহত রয়েছে (এবং আমি মনে করি) সম্পন্ন হবে। আমি কেবল আইওএস 5 এ আরসি সম্পর্কে পড়েছি, এবং মূলত আমি বুঝতে পেরেছিলাম যে আমাদের আর কখনও অবজেক্টগুলি প্রকাশ এবং সংরক্ষণের প্রয়োজন হবে না। আমার প্রশ্নগুলি হ'ল:

  1. যদি আমি আইওএস 5 এ আপগ্রেড করার সিদ্ধান্ত নিই তবে আমার কোড থেকে আমার সমস্ত বিবৃতি [myObject retain]এবং সরানো দরকার [myObject release]?

  2. আমি যদি এআরসি ব্যবহার করে আইওএস 5 এর জন্য একটি নতুন অ্যাপ্লিকেশন বিকাশ করি তবে আমার কি কোনও ধরণের "রেট্রো-সামঞ্জস্য" চেকগুলি প্রয়োগ করতে হবে? যেমন: আমি কি আইওএসের সংস্করণ পরীক্ষা করে কল কল ধরে রাখতে এবং সেই অনুসারে প্রকাশ করতে হবে? সুতরাং, মূলত, এআরসি সমস্ত আইওএস সংস্করণ বা কেবল আইওএস 5 এর জন্য উপলব্ধ?

উত্তর:


150

আমি যদি আইওএস 5 এ আপগ্রেড করার সিদ্ধান্ত নিই তবে আমার কোড থেকে আমার সমস্ত [মাইবজেক্ট ধরে রাখা] এবং [মাইবজেক্ট রিলিজ] বিবৃতি অপসারণ করা দরকার?

হ্যাঁ, তবে এক্সকোড ৪.২ এ একটি নতুন "মাইগ্রেট টু অবজেক্টিভ-সি এআরসি" সরঞ্জাম (সম্পাদনা-> রিফ্যাক্টর মেনুতে) অন্তর্ভুক্ত রয়েছে, যা এটি আপনার জন্য করে। ডেলোককে কল করা আলাদা গল্প। মন্তব্যে উল্লিখিত বাজে রেফারেন্সে উল্লেখ করা হয়েছে যে আপনার ডিলোক পদ্ধতিটি আপনার রাখা উচিত:

যুক্তি: যদিও এআরসি উদাহরণস্বরূপ ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে বিনষ্ট করে, তবুও একটি ডেলোক পদ্ধতি রচনার বৈধ কারণ রয়েছে যেমন অ-ধরে রাখতে সক্ষম সংস্থানগুলি মুক্ত করা। এই জাতীয় পদ্ধতিতে [সুপার ডেলোক] কল করতে ব্যর্থ হওয়া প্রায়শই একটি বাগ is

আপনি একটি নতুন-ফোবিজেসি-আর্ক সংকলক পতাকা ব্যবহার করে আরআক সক্ষম করুন। ম্যাক ওএস এক্স ভি 10.6 এবং ভি 10.7 (64-বিট অ্যাপ্লিকেশন) এবং আইওএস 4 এবং আইওএস 5 এর জন্য এক্সকোড 4.2 এ আরসি সমর্থিত (ম্যাক ওএস এক্স ভি 10.6 এবং আইওএস 4 এ দুর্বল উল্লেখগুলি সমর্থিত নয়)। এক্সকোড ৪.১ এ কোনও আরসি সমর্থন নেই।

-

আমি যদি এআরসি ব্যবহার করে আইওএস 5 এর জন্য একটি নতুন অ্যাপ্লিকেশন বিকাশ করি তবে আমার কি কোনও ধরণের "রেট্রো-সামঞ্জস্য" চেকগুলি প্রয়োগ করতে হবে? উদাহরণস্বরূপ: আমি কি আইওএসের সংস্করণ পরীক্ষা করে কল কল ধরে রাখতে এবং সেই অনুযায়ী প্রকাশ করতে হবে? সুতরাং, মূলত, এআরসি সমস্ত আইওএস সংস্করণ বা কেবল আইওএস 5 এর জন্য উপলব্ধ?

না, কারণ এআরসি তার জাদুটি সংকলনের সময় করে এবং রান টাইমে নয় does

আপনার সংরক্ষণের, প্রকাশ এবং স্বায়ত্তশক্তি কখন ব্যবহার করবেন তা মনে রাখার পরিবর্তে, আরসি আপনার সামগ্রীর আজীবন প্রয়োজনীয়তাগুলি মূল্যায়ন করে এবং সংকলনের সময় স্বয়ংক্রিয়ভাবে উপযুক্ত পদ্ধতি কলগুলি সন্নিবেশ করায়। সংকলকটি আপনার জন্য উপযুক্ত dealloc পদ্ধতি উত্পন্ন করে।

এআরসি সম্পর্কিত আরও তথ্য: http://clang.llvm.org/docs/ অটোমেটিক রেফারেন্সকাউন্টিং html


তোমার ব্যাখার জন্য ধন্যবাদ!
লুক 47

4
এটি 100% সঠিক নয়। একটি সংকলক সুইচ রয়েছে যা ARC সক্ষম আছে কিনা তা নির্ধারণ করে। এছাড়াও এআরসি-র কিছু রানটাইম সমর্থন দরকার, আমি বিশ্বাস করি, তাই আপনি যদি আপনার অ্যাপ্লিকেশনটি আইওএস ৪.x এ কাজ করতে চান তবে আপনাকে আপনার রক্ষণাবেক্ষণ এবং প্রকাশগুলি ছেড়ে দিতে হবে এবং নিশ্চিত হওয়া উচিত যে এআরসি চালু আছে কিনা।
জেরেমিপ

8
@ জেরেমিপি - আইওএস ৪.০ সত্যই এটিআরসি অ্যাপ্লিকেশনগুলির লক্ষ্য হিসাবে সমর্থিত, সুতরাং সেই পুরানো প্ল্যাটফর্মটি মোকাবেলার জন্য ম্যানুয়াল রেফারেন্স গণনা করা কোড রাখার দরকার নেই keep আইফোন ওএস 3.x সম্ভবত, তবে আমি কল্পনা করেছিলাম অ্যাপল 5.0 জাহাজের একবার টার্গেট প্ল্যাটফর্ম হিসাবে এর জন্য সমর্থন বন্ধ করে দিতে পারে, যেমন 4.0 প্রকাশিত হওয়ার পরে তারা 2.x এর জন্য করেছিল।
ব্র্যাড লারসন

5
@ ব্র্যাড আইওএস 4 এর ইনস্টল বেসটি ইতিমধ্যে 95% এরও বেশি। আমি মনে করি এটি যাইহোক আইওএস 3 সমর্থন ছাড়ার জন্য সংরক্ষণ করেছে।
হেনরিক পি হেসেল

2
আপনি সরান না dealloc, আপনি কেবল আপনার releaseসমস্তগুলি এবং [super dealloc]এটি থেকে সরিয়ে দিন। এবং 99.9% এ deallocকেবল অবজেক্টগুলি প্রকাশ করে, তাই আপনি এটি সরিয়ে দিন। তবে অবজেক্টগুলিকে এখনও অন্যান্য ক্লিন-আপ কার্য সম্পাদন করতে হবে যা নয় release(ফাইলগুলি বন্ধ করা, পর্যবেক্ষক অপসারণ ইত্যাদি)।
স্ট্যানিস্লাভ ইয়াগলো

8

প্রশ্নোত্তর: না, আপনার যদি একটি বিদ্যমান কোড থাকে তবে আপনি এটি -fno-obcc-arc এর মতো ব্যবহার করে চালিয়ে যেতে পারেন যে আপনি যে কোনও ফাইলের মধ্যে নির্বাচন করে এআরসি অক্ষম করতে পারবেন।

যদি আপনি চাই প্রতি নিষ্ক্রিয় এআরসি উপর একাধিক ফাইল:

  1. এক্সকোডে টার্গেট / বিল্ড পর্যায় / সংকলন উত্সগুলিতে কাঙ্ক্ষিত ফাইলগুলি নির্বাচন করুন
  2. প্রেস এন্টার । (ডাবল ক্লিক কেবল একটি ফাইল নির্বাচন করে)
  3. টাইপ করুন -fno-objc-arc
  4. এন্টার বা সম্পন্ন টিপুন

প্রশ্ন 2: না, লক্ষ্যটি আইওএস ৪.০ এর মতো কম হতে পারে


7

আমি যতদূর বুঝতে পেরেছি এবং যথাক্রমে আমার আইফোন / আইপড চলমান আইওএস 5 এবং আইওএস 4.3 যথাক্রমে কাজ করে, এটি সবই যথেষ্ট স্বয়ংক্রিয়। আমি একটি অ্যাপ্লিকেশন X.০ এর জন্য শুরু করেছিলাম এবং আইওএস 5.0 এর জন্য এক্সকোডের সাথে কাজ করার জন্য "আপডেট" করেছি যা রিলিজ এবং রক্ষণাবেক্ষণ সম্পর্কে আমার ধরণের সতর্কতা কোনও দিনই ছুঁড়ে না ফেলে, যদিও এটি সমস্ত ডেলোক ইত্যাদি হয়, তবে, একই কোডটির কিছুটা আমি sertedোকালাম (ফাইলটি অনুলিপি করে) আইওএস 5 এর জন্য এক্সকোড দিয়ে তৈরি একটি নতুন প্রকল্পে অনেকগুলি, অনেক সতর্কতা রয়েছে। সুতরাং দেখা যাচ্ছে যে আপনাকে এই সমস্ত কলগুলি সরাতে হবে না এবং না, এটি কোনওরকালে পুরানো সংস্করণগুলির জন্য এটি স্বয়ংক্রিয়ভাবে রূপান্তর করে। আমার আইপডটি প্রোফাইলিংয়ে আমি কোনও মেমরি ফাঁস বা ব্যর্থ হওয়া ডেলোকস / প্রকাশের অন্যান্য লক্ষণ দেখতে পাচ্ছি না। এটা কি সাহায্য করে?


সর্বশেষতম বিটা সংস্করণটি আমাকে সমস্ত বরাদ্দ কলগুলি সরাতে অনুরোধ জানায় এবং এটি প্রায়। আপনি এখনও ধরে রাখতে / প্রকাশ করতে পারেন তবে সিস্টেমে সর্বশেষ শব্দ রয়েছে।
ডিলান গাট্টে

5

আপনার প্রশ্নের এই অংশ সম্পর্কে

আমি যদি এআরসি ব্যবহার করে আইওএস 5 এর জন্য একটি নতুন অ্যাপ্লিকেশন বিকাশ করি তবে আমার কি কোনও ধরণের "রেট্রো-সামঞ্জস্য" চেকগুলি প্রয়োগ করতে হবে? উদাহরণস্বরূপ: আমি কি আইওএসের সংস্করণ পরীক্ষা করে কল কল ধরে রাখতে এবং সেই অনুযায়ী প্রকাশ করতে হবে? সুতরাং, মূলত, এআরসি সমস্ত আইওএস সংস্করণ বা কেবল আইওএস 5 এর জন্য উপলব্ধ?

এটি লক্ষ করা উচিত যে আইওএস 5 সংকলকটি "রেট্রো-সামঞ্জস্যতা" গ্রহণ করে (এটি মূলত বজায় রাখা / প্রকাশের কাজ করার কোডটি সংযোজন করে, মূলত) তবে আপনি যদি আইওএস 5.0 এর জন্য সংকলন না করে থাকেন তবে আপনি weakকীওয়ার্ড হিসাবে ব্যবহার করতে পারবেন না । পরিবর্তে আপনি ব্যবহার করুন assign। এটি দুর্ভাগ্যজনক: weakএটি একটি বিশাল সুবিধা (কোনও ঝুঁকির পয়েন্টার নেই, কখনও!)। আমার প্রশ্ন দেখুন এখানে সেই বিষয়ে আলোচনার জন্য weak, assignএবং এআরসি।


2

আপনি যদি নতুন-ফোবিজেসি-আর্ক কম্পাইলার পতাকা ব্যবহার না করে এআরসি অক্ষম করতে পারেন, তবে আপনাকে এগিয়ে চলার কোডটি পুনরায় লিখতে বাধ্য করা হবে না - আমার ধারণা (?)

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