2012-03-24 12 views
7

काफी सरल प्रश्न:Obj-C: प्रारंभकर्ता में एनएसईआरआर

मेरे पास मेरी कक्षा में एक इनिट विधि है जिसमें गलत होने की संभावना है। अगर ऐसा होता है, तो मैं "शून्य वापस लौटने" की योजना बना रहा हूं, लेकिन मैं भी एक त्रुटि वापस करना चाहूंगा। क्या यह एक अंतर्निहित विधि के लिए एक एनएसईआरआर ** पैरामीटर रखने का बुरा अभ्यास है? मेरे विधि घोषणा इस प्रकार दिखाई देगा:

- (id) initWithArgs:(NSString*) args andError:(NSError**)error; 

बहुत धन्यवाद, निक

उत्तर

7

यह असामान्य है, लेकिन मैं यह जरूरी एक बुरी आदत है नहीं लगता। मैं विधि के दूसरे भाग को "और त्रुटि:" के बजाय बस "त्रुटि" नाम दूंगा। आपको 'और' के साथ किसी विधि नाम के हिस्सों को जोड़ने की आवश्यकता नहीं है, और इस मामले में यह इंप्रेशन भी देता है कि ऑब्जेक्ट को प्रारंभ करने के लिए त्रुटि का उपयोग किया जा रहा है। बस इसे बनाने:

- (id) initWithArgs:(NSString*) args error:(NSError**)error; 

इसके अलावा, भूल नहीं है आवंटित वस्तु जारी करने के लिए यदि आप किसी और (शून्य) की तरह कुछ वापस जाने के लिए योजना बना रहे हैं:

- (id) initWithArgs:(NSString*) args error:(NSError**)error 
{ 
    if ((self = [super init])) { 
     if (canInitThisObject) { 
      // init this object 
     } 
     else { 
      [self release]; 
      self = nil; 
      if (error != nil) { 
       *error = [NSError errorWithDomain:someDomain code:someCode: userInfo:nil]; 
      } 
     } 
    } 
    return self; 
} 
+1

एक बात मैं सिफारिश करेंगे हमेशा के लिए त्रुटि स्थापित कर रही है विधि की शुरुआत में शून्य। इस बात की कोई गारंटी नहीं है कि कॉलर ने इसे शून्य कर दिया होगा। – EricS

+4

@EricS त्रुटि होने तक 'त्रुटि' को' nil' सेट करने का कोई कारण नहीं है। कॉलर को '@ त्रुटि' मान को तब तक नहीं देखना चाहिए जब तक कि विधि 'शून्य' न हो। अन्यथा करने के लिए एक बग है। @Caleb कोड को यह सुनिश्चित करने के लिए जांचना होगा कि 'त्रुटि' '* त्रुटि 'को निर्दिष्ट करने से पहले' त्रुटि 'गैर-न्यूल है। – bbum

+0

@bbum धन्यवाद - तय है। – Caleb

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