কিছু ফাইলের জন্য স্বয়ংক্রিয় রেফারেন্স গণনা অক্ষম করুন


183

আমি আইওএস 5 এসডিকে ডাউনলোড করেছি এবং খুঁজে পেয়েছি যে নতুন অ্যাপল সংকলকটির এআরসি একটি দুর্দান্ত বৈশিষ্ট্য। আপাতত, অনেক তৃতীয় পক্ষের ফ্রেমওয়ার্কগুলি এআরসি সমর্থন করে না। আমি কি আমার নতুন কোডের জন্য এআরসি ব্যবহার করতে এবং বর্তমান বজায় রাখা / প্রকাশের কোডটি অপরিবর্তিত রাখতে পারি? এআরসি রূপান্তরকারী এখানে কাজ করে না, কারণ কিছু ফ্রেমওয়ার্ক যেমন জেএসনকিট, রূপান্তরকারী ব্যবহার করে আরসি তে রূপান্তরিত হতে পারে না।

সম্পাদনা:

উত্তরটি হ'ল -fno-objc-arcযে ফাইলগুলি আপনি আরসি না চান তার জন্য সংকলক পতাকাগুলিতে যুক্ত করা। এক্সকোড 4 এ, আপনি আপনার লক্ষ্য -> পর্যায়গুলি তৈরি করুন -> সংকলন উত্সের আওতায় এটি করতে পারেন।



2
স্পষ্ট করার জন্য, আপনি কেবল এটি .mফাইলটিতে যুক্ত করুন। না .hফাইল।
ma11 শেই 28

আমি এই কথোপকথনটি পেয়েছি: github.com/gowalla/AFNetering/issues/36 সম্ভবত এটি কোনও আইওএস 5 এআরসি সমর্থিত প্রকল্পে জেএসনকিটকে সংহত করার জন্য কাউকে সহায়তা করে ;-) তবে আমি এই মুহুর্তে চেষ্টা করে

এই পদ্ধতিটি আমার পক্ষে কাজ করেছিল। আমি আমার প্রকল্পে ইউডিপি মাল্টিকাস্টের জন্য অ্যাসিএনইউপিপসকেট যোগ করছিলাম এবং সেই ফাইলগুলি [অন্তত বর্তমান সংস্করণ] আর্ক সমর্থন করছে না। তাই আমি AsyncUdpSket.m ফাইলে সংকলক পতাকা যুক্ত করতে উপরের পদ্ধতিটি ব্যবহার করেছি এবং আমি আমার অ্যাপ্লিকেশনটির সাথে সূক্ষ্মভাবে কাজ করার কোডটি পেতে পারি।
আশু জোশী

2
এটি পুরোপুরি কাজ করে! সুনির্দিষ্ট বৈশিষ্ট্য: আপনার টার্গেটে যান এবং বিল্ড পর্যায়গুলি নির্বাচন করুন, তারপরে উত্সগুলি সংকলন করুন। যদি আপনি প্রশ্নে থাকা এম। এম ফাইলটিতে ডাবল ক্লিক করেন, এটি এমন একটি বাক্স পপ আপ করবে যেখানে আপনি টাইপ / পেস্ট করতে পারেন: "-fno-objc-arc"
এমপেমবার্ন

উত্তর:


73

পাবলিক এআরসি ডক্স , যদিও এই বিষয়টিতে সরাসরি পরিষ্কার নয়, মনে হয় যে যতক্ষণ না প্রতিটি শ্রেণি হয় সমস্ত এআরসি বা সমস্ত ম্যানুয়ালি-পরিচালিত হয়, ক্লাসগুলি একটি প্রোগ্রামে সংহত করা যায়।

আপনি কেবল একক শ্রেণিতে আরসি এবং নন-এআরসি মিশ্রণ করতে পারবেন না; ডকুমেন্ট বলছেন যে পাঠানোর retain, release, autorelease, অথবা retainCount(টাইমার ও বিলম্ব সঞ্চালিত হয়, যা ব্যবহার সমেত কোনো উপায়ে বার্তা @selectorএআরসি কোড নিষিদ্ধ)। সুতরাং আপনি একটি আরসি ক্লাসে নন-এআরসি করতে পারবেন না (কারণ প্রয়োজনীয় বার্তাগুলি নিষিদ্ধ করা হয়েছে) এবং আপনি একটি নন-আরসি ক্লাসে আরসি করতে পারবেন না (কারণ এআরসি সিনট্যাক্স উপাদানগুলি যুক্ত করে যা এআরসি ছাড়াই অবৈধ)।

আপনি নন-এআরসি লাইব্রেরি / ফ্রেমওয়ার্কগুলিকে একটি এআরসি প্রোগ্রামে সংহত করতে পারবেন কিনা সে সম্পর্কে একই নথিটি কিছুটা পরিষ্কার: এটিতে আপনি এমন কোনও প্রোগ্রামে আরসি লাইব্রেরি / ফ্রেমওয়ার্কগুলি ব্যবহার করতে পারবেন কিনা তা উল্লেখ করা হয়নি যেখানে আপনার সমস্ত কোড নন-এআরসি রয়েছে, তবে উপরের সমস্তটি দেওয়া হলেও, বোঝাটি হ্যাঁ বলে মনে হচ্ছে।


ধন্যবাদ! বিদ্যমান নন-এআরসি ক্লাসগুলির জন্য কীভাবে এআরসি অক্ষম করতে হবে তা আমি খুঁজে বের করেছি।
ননামেলাইভ

আপনি কি করছেন আমাদের সাথে ভাগ করে নিতে পারেন?
ডেভিড এইচ

1
@ ডেভিড এইচ: যদি আপনি প্রশ্নকর্তাকে এটিকে সম্বোধন করতে চেয়েছিলেন, তবে আপনার লক্ষ্য করা উচিত যে প্রশ্নকর্তা তাদের সমাধানটি প্রশ্নের মধ্যে সম্পাদনা করেছিলেন।
পিটার হোসি

ARC সংকলন HEADER ফাইলগুলিতে অক্ষম করা যায় না। কলং এর প্রয়োগকরণ / পদ্ধতি ফাইলের সংকলনের উপর ভিত্তি করে ইন্টারফেস / শিরোনামটি সংকলন করবে না। অতএব, শিরোনাম ফাইলগুলি অবশ্যই একটি মিশ্র সংকলনে এআরসি এবং নন-এআরসি উভয়ের সাথে সামঞ্জস্যপূর্ণ হতে হবে। আমি এটি সংকলকটিতে বাগ হিসাবে দেখছি।
কারমিন

1
@ কারমিন: তা নয়। সংকলক শিরোনাম ফাইলগুলির দিকে তাকাবে না কেবলমাত্র যখন আপনি এটি বলবেন, কেবলমাত্র আপনি কেবল #importমডিউল ফাইলগুলি থেকে আইএন করেই করেন। সংকলক পতাকা সেটিং প্রতিটি মডিউল ফাইলের জন্য (আরও স্পষ্টভাবে, "সংকলন উত্স" বিল্ড ফেজের প্রতিটি ফাইল)। সংকলকটির আরআর ব্যবহার করা উচিত কিনা তা জানার কোনও উপায় নেই বা অন্য কোনও ফাইলের জন্য নয়, এটি মডিউল ফাইলটি দিয়ে শুরু করা পছন্দটি উত্তরাধিকারসূত্রে উত্তরাধিকারী করে দেওয়া বাদ দিয়ে।
পিটার হোসি

78

মাল্টিপল ফাইলগুলিতে কীভাবে আরসি নিষ্ক্রিয় করা যায় তা খুব স্বজ্ঞাত নয় , কিছুক্ষণের জন্য আমি এটি একের পর এক করছিলাম যতক্ষণ না এটি সনাক্ত করা যায় that

  1. এক্সকোডে টার্গেট / বিল্ড পর্যায়সমূহ / সংকলন উত্সগুলিতে পছন্দসই ফাইলগুলি নির্বাচন করুন (সিএমডি + ক্লিক করুন বা শিফট + ক্লিক করুন)
  2. প্রেস এন্টার (ডাবল ক্লিক নির্বাচন পুনরায় সেট করবে, তাই এটি কাজ করে না)
  3. টাইপ করুন -fno-objc-arc
  4. এন্টার বা সম্পন্ন টিপুন

1
এটি এখানে জিজ্ঞাসিত প্রশ্নের উত্তর নয়, তবে যাইহোক রক্তাক্ত ভাল টিপ! ভোট দেওয়া +1
ক্রিস্টফ ভ্যান ল্যান্ডস্কুট

আপনি ঠিক বলেছেন, এটি নয়, তবে আমি সর্বদা স্যুইচটি এবং এই উত্তরটি শীর্ষের মধ্যে একটির জন্য গুগল করেছিলাম। আমি ভেবেছিলাম আজকাল বেশিরভাগ লোকেরা উত্তরটি ইতিমধ্যে জানে তবে এই "টিপ" নয়
তবিদাবা

35

আপনি যদি কিছু ফাইলের জন্য স্বয়ংক্রিয় রেফারেন্স গণনা অক্ষম করতে চান তবে কেবল ধাপগুলি অনুসরণ করা এটির পক্ষে সহজ You

Xcode

ব্যবহৃত পতাকাটি হল -fno-obcc-arc চাপার পরে এন্টার টিপুন! সংকলক পতাকাগুলির অধীনে আপনাকে সারির ডান কলামে ডাবল ক্লিক করতে হবে। আশা করি এটি ধন্যবাদ সাহায্য করবে :)


14
পতাকাটি ব্যবহার করে একটি নন-এআরসি প্রকল্পের একটি নির্দিষ্ট ফাইলে এআরসি সক্ষম করতে আপনি একই পদ্ধতিটি ব্যবহার করতে পারেন -fobjc-arc
lnafziger

ARC সংকলন HEADER ফাইলগুলিতে অক্ষম করা যায় না। কলং এর প্রয়োগকরণ / পদ্ধতি ফাইলের সংকলনের উপর ভিত্তি করে ইন্টারফেস / শিরোনামটি সংকলন করবে না। অতএব, শিরোনাম ফাইলগুলি অবশ্যই একটি মিশ্র সংকলনে এআরসি এবং নন-এআরসি উভয়ের সাথে সামঞ্জস্যপূর্ণ হতে হবে। আমি এটি সংকলকটিতে বাগ হিসাবে দেখছি।
কারমিন 24'13

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