2011-10-28 18 views
108
@interface Article : NSObject 

@property (nonatomic, strong) NSString *imageURLString; 

@end 


@implementation Class 

@synthesize imageURLString = _imageURLString; 

- (void)setImageURLString:(NSString *)imageURLString { 
    _imageURLString = imageURLString; 
    //do something else 
} 

के साथ ओवरराइड सेटर क्या एआरसी सक्षम होने पर मैंने सही ढंग से सेटटर को ओवरराइड किया था?आर्क

+2

हां, यह मेरे लिए सही लग रहा है। क्या यह काम कर रहा है कि आप कैसे उम्मीद करते हैं या नहीं? –

उत्तर

89

हां, यह सही है। मुझे विश्वास करने में थोड़ी देर लग गई कि यह वास्तव में करना सही है।

आपको एहसास है कि इस मामले में, ओवरराइड आवश्यक नहीं है क्योंकि आप मानक जेनरेट किए गए सेटर से अधिक नहीं करते हैं? केवल अगर आप setImageURLString: पर अधिक कोड जोड़ते हैं तो आपको सेटटर को ओवरराइड करने की आवश्यकता होगी।

+6

हां। मुझे यह एहसास है। मैं टिप्पणी जोड़ता हूं जहां मैं अपना अतिरिक्त कोड जोड़ना चाहता हूं। उत्तर के लिए बहुत बहुत धन्यवाद। – rowwingman

+4

ओह, ठीक है, क्षमा करें, मैंने उदारतापूर्वक उस टिप्पणी को अनदेखा कर दिया है। :) – Pascal

+4

आप जानते हैं कि एक दिलचस्प प्रयोग क्या होगा? टिप्पणी रंग बदलना (एसओ और अन्य साइटों और आईडीई में) ... आमतौर पर यह हल्का भूरा या कुछ ऐसा नहीं होता है जो खड़ा नहीं होता है। # एफएफ 0000 शायद? क्या इससे कोई फर्क पड़ता है? हम प्रोग्रामर के रूप में टिप्पणियों को अनदेखा करने के लिए उपयोग किए जाते हैं जब तक कि हम विशेष रूप से कुछ काम करने का प्रयास करने की कोशिश नहीं कर रहे हैं, इस मामले में हम कभी-कभी उन्हें अनदेखा भी करते हैं। – figha

68

@ पास्कल द्वारा दिए गए उत्तर पर विस्तार करना मैं बस यह जोड़ना चाहता हूं कि यह निश्चित रूप से सही काम है और आप यह देखकर जांच सकते हैं कि कोड किस प्रकार संकलित करता है। _objc_storeStrong करने के लिए कॉल जो according to LLVM करता

 .align 2 
     .code 16 
     .thumb_func  "-[Article setImageURLString:]" 
"-[Article setImageURLString:]": 
     push {r7, lr} 
     movw r1, :lower16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4)) 
     mov  r7, sp 
     movt r1, :upper16:(_OBJC_IVAR_$_Article._imageURLString-(LPC7_0+4)) 
LPC7_0: 
     add  r1, pc 
     ldr  r1, [r1] 
     add  r0, r1 
     mov  r1, r2 
     blx  _objc_storeStrong 
     pop  {r7, pc} 

नोट:: मैं कैसे की जाँच के बारे में जाने के लिए, लेकिन मूल रूप से है कि कोड (ARMv7) करने के लिए नीचे संकलित बारे में blog post लिखा

id objc_storeStrong(id *object, id value) { 
    value = [value retain]; 
    id oldValue = *object; 
    *object = value; 
    [oldValue release]; 
    return value; 
} 

तो, जवाब देने के लिए आपका सवाल, हाँ यह सही है। एआरसी ने पुराने मूल्य की सही रिलीज में जोड़ा है और नए मूल्य को बनाए रखा है।

[शायद जटिल जवाब से अधिक है, लेकिन सोचा था कि यह कैसे आप भविष्य में खुद के लिए एआरसी संबंधित प्रश्न इस तरह का जवाब देने के बारे में जा सकते हैं दिखाने के लिए उपयोगी था]

+1

इसके लिए धन्यवाद, मैं अपना कोड अनुमान लगा रहा था (और यह जवाब) लेकिन आपने मेरे डर को आराम करने के लिए रखा है। – evanflash

+0

बहुत उपयोगी जवाब! –

+1

धन्यवाद मैट। यह 43 वें मतदाता होने का सही अनुभव नहीं था, क्योंकि 42 इस जवाब के लिए इस तरह के एक उपयुक्त वोट के रूप में लग रहा था। – bmauter

-10

कॉल

[super setImageURLString:theString]; 

यह

है कि
+1

सुपरक्लास में setImageURLString का कार्यान्वयन होने की संभावना नहीं है: –

+0

यहां तक ​​कि अगर ऐसा होता है, तो शायद यह वह सामान होगा जो आप नहीं करना चाहते हैं। –

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