2011-10-12 11 views
31

लिंक करने पर एआरसी से संबंधित प्रतीकों को याद किया गया है क्योंकि मैंने एआरसी की पहली बार घोषणा की थी कि यह एक संकलित समय की बात है और आईओएस 4 के साथ संगत होगा। मैंने अपनी परियोजना को सफलतापूर्वक दोबारा काम किया है एक्सकोड 4.2 के स्वचालित रिफैक्टरिंग का उपयोग करके एआरसी को, और आईओएस 5.0 एसडीके के खिलाफ संकलित होने पर, यह ठीक काम करता है। हालांकि, अगर मैं अपने आईओएस के खिलाफ संकलित करने के लिए कोशिश 4.2 एसडीके, यह लिंक समय में विफल रहता है, निम्नलिखित प्रतीक लापता:क्या एआरसी वास्तव में आईओएस 4 में समर्थित है? आईओएस 4.2 एसडीके में समय

  • _objc_retainAutoreleaseReturnValue
  • _objc_autoreleaseReturnValue
  • _objc_storeStrong
  • _objc_retain
  • _objc_release
  • _objc_retainAutoreleasedReturnValue
,210

मैं जाँच की, और इन प्रतीकों 5.0 में मौजूद हैं लेकिन 4.2 नहीं:

iPhoneOS5.0.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$ 
00005ed0 T _objc_retain 
000061d0 T _objc_retain 

iPhoneOS4.2.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$ 
[... *crickets* ...] 

इसका मतलब यह है कि एप्पल झूठ बोला? मैं इसके बजाय मानता हूं कि मैं उलझन में हूं और कुछ गलत कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि क्या।

यह एआरसी आईओएस 4.3 और उसके बाद पर समर्थित है Xcode 4.2 (4C199 बिल्ड)

+0

मुझे लगता है कि इसे आईओएस 4.3 की आवश्यकता है। – ughoavgfhw

+3

दूसरों के कहने के अलावा, 4.2 एसडीके स्थापित न करें। 5.0 एसडीके का प्रयोग करें। अपना तैनाती लक्ष्य निर्धारित करें। मेरा मतलब यह नहीं है, मेरा मतलब सामान्य रूप से है; पुराने एसडीके का इस्तेमाल नहीं किया जाना चाहिए। –

+1

वाह, मुझे विश्वास नहीं है कि मैं यह जानकर लंबे समय तक चला गया हूं कि नए एसडीके पुराने ओएस संस्करणों के लिए निर्माण कर सकते हैं। यहां मैं ऐप्पल में पागल हो गया हूं कि वे मेरे सभी पुराने एसडीके संस्करणों को हटा रहे हैं:/धन्यवाद! –

उत्तर

34

के जीएम रिलीज के साथ है। आपको आईओएस 5.x एसडीके का उपयोग करने की आवश्यकता है लेकिन परिनियोजन लक्ष्य के लिए आईओएस 4.3 का चयन कर सकते हैं। एक चीज जो 4.x में समर्थित नहीं है स्वचालित कमजोर संदर्भ शून्य है।

उद्देश्य-सी फ़ीचर उपलब्धता सूचकांक के लिए ऐप्पल के दस्तावेज़ here देखें।

एक्सकोड 4.4 और 4.5 ऐप्स को सबमिट करने के लिए उपयोग किया जा सकता है।

ध्यान दें कि NSDictionary और NSArray सबस्क्रिप्टिंग ओएस एक्स 10.6 और आईओएस 4 पर वापस तैनात है, तो तैनाती लक्ष्य को भी वापस सेट करना सुनिश्चित करें।

+0

धन्यवाद (चेहरे का)। यह वास्तव में एक तैनाती लक्ष्य के रूप में 4.2 के साथ काम कर रहा प्रतीत होता है, हालांकि ...अब एक असली डिवाइस पर परीक्षण करने जा रहा है। –

+0

यह मेरे डिवाइस पर भी ठीक चल रहा है, आईओएस 4.2.1 चला रहा है। –

+0

अगर मैं अस्वीकार हो जाता हूं तो मैं इसे अपडेट करूँगा :) धन्यवाद। –

11

थोड़ा देर हो चुकी है, लेकिन यह महत्वपूर्ण जानकारी है। स्वीकृत उत्तर सही है, Apple states iOS 4.0 and above एआरसी समर्थन के लिए न्यूनतम ओएस के रूप में।

हालांकि, यह कुछ स्थितियों में तोड़ सकता है। उनमें से एक निश्चित रूप से __weak कीवर्ड है और यह डेरिवेटिव है। आपको निम्न की तरह एक त्रुटि दिखाई देगी।

dyld: lazy symbol binding failed: Symbol not found: _objc_initWeak 

एक दूसरा और बहुत खतरनाक स्थिति है जब आप NSObject की +load विधि का उपयोग है। यदि आप आईओएस 4.x पर एआरसी का उपयोग करके ऐसा करते हैं तो आपके पास रनटाइम क्रैश होंगे जो खोजने में बहुत मुश्किल हैं। यदि आपको निम्न की तरह रनटाइम त्रुटियां मिलती हैं, तो अपने +load विधियों की जांच करें। मेरे लिए यह उस विशेष फ़ाइल के लिए -fno-objc-arc ध्वज सेट करने के लिए काम किया।

dyld: lazy symbol binding failed: Symbol not found: _objc_retainAutoreleasedReturnValue 
+0

आपके द्वारा उल्लेख किया गया दूसरा भाग मुझे वापस लेने के लिए आया है, 'लोड' में दुर्घटनाग्रस्त हो गया है। हम जल्द ही आईओएस 4.3 छोड़ देंगे लेकिन मुझे 4.3 से 5 या 6 अपडेट करने से इंकार करने वाले कुछ लोगों के लिए एक और कामकाजी अपडेट प्रदान करना होगा। – Pascal

संबंधित मुद्दे