2012-01-10 16 views
8

जब मेरे वर्तमान कोड को एआरसी में माइग्रेट करने का प्रयास किया जाता है, तो जब भी मैं एनएसटीएनआरओशन तर्क के रूप में एनएसएसटींग पास करता हूं तो मुझे त्रुटियां मिल रही हैं।एनएसआईएनवोकेशन और एआरसी (स्वचालित संदर्भ गणना)

उदाहरण:

NSInvocation inv = ...; 
NSString *one = @"Hello World!"; 
[inv setArgument:&one atIndex:2]; 

त्रुटि होता है जब मैं Refactor का उपयोग -> संपादन मेनू से ऑब्जेक्टिव-सी एआरसी विकल्प में बदलें। पाठ "एनएसआईएनवोकेशन का सेट आर्ग्यूमेंट एक ऑब्जेक्ट के साथ __unsafe_retained के अलावा स्वामित्व वाले किसी ऑब्जेक्ट के साथ सुरक्षित नहीं है।"

मैं इस बारे में कैसे प्राप्त करूं?

उत्तर

10

यह काम कर सकता है;

__unsafe_unretained NSString *one = @"Hello World"; 
+3

यह काम करेगा, लेकिन आपको इस पर स्मृति प्रबंधन से बहुत सावधान रहना होगा। मैं अब एनएसआईएनवोकेशन का उपयोग न करने की सलाह दूंगा यदि आप इससे बच सकते हैं ... –

+1

मैं ओसीएमॉक का उपयोग कर रहा हूं, और यह अपने कॉलबैक ब्लॉक में एनएसआईएनवोकेशन ऑब्जेक्ट पास करता है। यदि आप सभी पैरामीटर पर __unsafe_unretained का उपयोग नहीं करते हैं तो एआरसी बहुत दुखी हो जाता है। तो टिप के लिए धन्यवाद, रहस्यमय दुर्घटनाओं चले गए! – phatmann

5

जैसा कि यहोशू वेनबर्ग ने टिप्पणी की, एनएसआईएनवोकेशन का उपयोग करके अब और अनुशंसा नहीं की जाती है। यदि आपके पास दो पैरामीटर हैं तो आप performSelector का उपयोग कर सकते हैं। तीन पैरामीटर या अधिक के लिए, आप NSObject के -methodForSelector: का उपयोग here समझा सकते हैं।

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