2012-03-07 6 views
15

मैंने अभी अपना ऐप ARC पर परिवर्तित कर दिया है, और जब यह ठीक बनाता है, तो मुझे 600 चेतावनियां मिलती हैं, जो सभी मेरे गुणों से संबंधित हैं। जैसे:ऐप एआरसी में परिवर्तित हो गया, अब मेरी गुणों के बारे में चेतावनियां प्राप्त हो रही हैं

डिफ़ॉल्ट संपत्ति विशेषता 'आवंटित' के लिए उपयुक्त नहीं गैर जीसी वस्तु

नहीं 'असाइन', 'बनाए रखने' या 'प्रतिलिपि' विशेषता निर्दिष्ट किया जाता है - 'असाइन' ग्रहण

है

Screenshot for warning

Xcode मेरी कोड परिवर्तित करने के बाद, यहाँ है क्या मेरी गुण की तरह लग रहे:

@property (nonatomic) EKEventStore *eventStore; 
@property (nonatomic) EKCalendar *defaultCalendar; 
@property (nonatomic) UIActionSheet *currentActionSheet; 
@property (nonatomic) UILabel *noEventLabel; 

किसी ने इन सभी को strong जोड़ने की आवश्यकता के बारे में बात की। क्या यह मामला है? क्या एक्सकोड कुछ जोड़ना भूल गया?

+0

गुण रूपांतरण से पहले क्या दिखते थे? अभी तक एआरसी का उपयोग नहीं किया है, लेकिन मुझे देखने की उम्मीद है (nonatomic, retain) या (nonatomic, असाइन) आदि –

+0

हाँ, इससे पहले कि वे (nonatomic, retain) –

उत्तर

18

एआरसी सही है। आपके पास नहीं मेमोरी-प्रबंधन क्वालिफ़र नहीं हो सकता है; आप असाइन करें, असाइन करें (या मजबूत जो एक ही चीज़ है), या कमजोर।

पहले, असाइनमेंट डिफ़ॉल्ट था। लेकिन शायद यह नहीं है कि आप क्या चाहते हैं, क्योंकि यह सबसे खराब संभव विकल्प है - यह एक पुरानी शैली गैर-एआरसी कमजोर संदर्भ है। आप या तो एक स्मार्ट एआरसी कमजोर संदर्भ चाहते हैं (ऑब्जेक्ट अस्तित्व से बाहर होने पर शून्य हो जाता है) या एक मजबूत संदर्भ (एआरसी द्वारा आपके लिए मेमोरी-प्रबंधित)।

+0

ठीक है, क्योंकि वे (nonatomic, बनाए रखने) मुझे लगता है कि अब मैं चाहता हूं (nonatomic, मजबूत), यह सही है? एक्सकोड ने मेरे लिए ऐसा क्यों नहीं किया होगा ?! –

+0

क्योंकि कोई संपत्ति मजबूत या कमजोर है डेवलपर तक है या नहीं।एआरसी के लिए ऐप्पल के लक्ष्यों में से एक यह 100% विश्वसनीय होने के लिए था, इसलिए वे एक तरफ या दूसरे को नहीं मानेंगे (असाइनमेंट की धारणा एआरसी से पहले थी इसलिए यह अलग है)। –

+0

@NicHubbard: यह वास्तव में एक संभावित बग की तरह ध्वनि करता है। यदि आपने पहले 'बनाए रखा' था, तो संभवतः आप 'मजबूत' चाहते हैं। आप [एक बग रिपोर्ट फाइल करना चाहते हैं] (http://bugreport.apple.com)। –

7

दूसरा जवाब जोड़ने के लिए खेद है, लेकिन यह मेरे विचार से ज्यादा जटिल हो गया है। यह पता चला है कि आप एक्सकोड 4.3 में एक बदले व्यवहार (शायद एक बग?) देख रहे हैं।

एक्सकोड 4.2 में, कनवर्टर (nonatomic, retain) को (nonatomic, strong) में बदलने की पेशकश करता। लेकिन एक्सकोड 4.3 में, यह इसे (nonatomic) में बदलने की पेशकश करता है; मुझे लगता है कि अगर आप इसे नहीं चाहते हैं, retain से strong बदलना आपके सामने परिवर्तित हो रहा है।

दूसरी तरफ, एक्सकोड 4.2, (nonatomic) अकेले संश्लेषित संपत्ति के लिए बिल्कुल अवैध था; एक्सकोड 4.3 में, यह नहीं है: आपको चेतावनी मिलती है, लेकिन ऐसा लगता है कि आपका मतलब assign है और इसलिए यह अवैध नहीं है।

तो एएलसी एलएलवीएम 3.1 में कैसे काम करता है और एक्सकोड 4.3 एआरसी कनवर्टर में एक साथ परिवर्तन में बदलाव आया है।

+0

इसे साफ़ करने के लिए धन्यवाद। –

+2

यह समझ में नहीं आता है। डिफ़ॉल्ट अब गलत है, असाइन नहीं है। तो (nonatomic) अकेले मतलब होना चाहिए (nonatomic, मजबूत)। चेतावनी वह है जो गलत है। –

+0

और यह, महिलाओं और सज्जनो, यही कारण है कि प्रोजेक्ट मैं अभी भी ** ** ** मुख्य रूप से एआरसी में अपने मुख्य, एक्सकोड 4.2-मशीन पर परिवर्तित नहीं कर सकता हूं, जिसे मैंने लैन के माध्यम से स्थानांतरित करने के लिए शेर/एक्सकोड 4.3 चलाने वाले दूसरे मैक में स्थानांतरित किया था और फिर वापस, निर्माण नहीं करेगा। मुझे लगता है कि हम सभी सहमत हैं कि एआरसी अभी भी ** बीटा ** में है? –

3

मुझे लगता है कि उत्तर गलत हैं।

एक्सकोड 4.3 में आपको एक चेतावनी मिलती है। हालांकि, यह मानता है कि आप रीटैन का मतलब है। एआरसी के तहत कोड के लिए नया डिफ़ॉल्ट रखें। किसी ने मुझे बताया कि एक्सकोड इसे ठीक कर रहा है।

अगर मैं गलत हूं तो कृपया मुझे सही करें।

+1

यह सही है। अधिक सटीक रूप से, obj-c ऑब्जेक्ट गुण डिफ़ॉल्ट रूप से मजबूत होते हैं। –

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