2012-12-06 11 views
7

में समान नाम के साथ क्लास विधि और इंस्टेंस विधि मेरे पास एक अधिसूचना समस्या का समाधान है जो अच्छी तरह से काम करता है, लेकिन मुझे डर है कि यह एक बुरा विचार हो सकता है।उद्देश्य-सी

मेरे पास एक अधिसूचना है जिसे कक्षा के प्रत्येक उदाहरण और कक्षा द्वारा स्वयं संभालने की आवश्यकता है। इसे संभालने के लिए, मैं कक्षा के वर्ग और उदाहरण दोनों द्वारा अधिसूचना के लिए पंजीकरण कर रहा हूं। चूंकि यह एक ही अधिसूचना है, इसलिए मैंने कक्षा और आवृत्ति विधि का नाम दिया है। यह उस मानक का पालन करता है जिसे हमने सेट किया है कि अधिसूचना हैंडलर का नाम कैसे दिया जाता है।

क्या यह एक बुरा विचार है? क्या कुछ छिपी हुई है जो मुझे याद आ रही है। क्या मैं भविष्य के डेवलपर्स से बिल्ली को भ्रमित कर दूंगा?

+ (void)initialize 
{ 
    if (self == [SICOHTTPClient class]) { 
     [[self notificationCenter] addObserver:self 
             selector:@selector(authorizationDidChangeNotification:) 
              name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
             object:nil]; 
    } 
} 

- (id)initWithBaseURL:(NSURL *)url 
{ 
    self = [super initWithBaseURL:url]; 

    if (self) { 
     self.parameterEncoding = AFJSONParameterEncoding; 
     [self registerHTTPOperationClass:[SICOJSONRequestOperation class]]; 
     [self setDefaultHeader:@"Accept" value:@"application/json"]; 

     if ([[self class] defaultAuthorization]) 
      [self setDefaultHeader:@"Authorization" value:[[self class] defaultAuthorization]]; 

     [[[self class] notificationCenter] addObserver:self 
               selector:@selector(authorizationDidChangeNotification:) 
                name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
               object:nil]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [[[self class] notificationCenter] removeObserver:self 
               name:SICOJSONRequestOperationAuthorizationDidChangeNotification 
               object:nil]; 
} 

#pragma mark Notifications 

- (void)authorizationDidChangeNotification:(NSNotification *)notification 
{ 
    NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey]; 

    if ([authorization isKindOfClass:[NSString class]]) { 
     [self setDefaultHeader:@"Authorization" value:authorization]; 
    } else { 
     [self clearAuthorizationHeader]; 
    } 
} 

+ (void)authorizationDidChangeNotification:(NSNotification *)notification 
{ 
    NSString *authorization = notification.userInfo[SICOJSONRequestOperationAuthorizationKey]; 

    if ([authorization isKindOfClass:[NSString class]]) { 
     [self setDefaultAuthorization:authorization]; 
    } else { 
     [self setDefaultAuthorization:nil]; 
    } 
} 
+1

सुपर प्रश्न। मेरे पास हजारों अंक नहीं हैं, लेकिन मैं कह सकता हूं, उदाहरण और कक्षा के तरीके संघर्ष नहीं करेंगे, क्योंकि उनकी आवश्यकता और कार्यान्वयन बहुत अलग हैं। –

उत्तर

3

यह वही कोड टिप्पणियां एक वर्ग विधि और एक ही नाम होने उदाहरण विधि के साथ उद्देश्य सी में कोई समस्या नहीं है :)

के लिए कर रहे हैं।

मेरा सुझाव है या तो:

  • अपनी अधिसूचना विधि नाम कल्पना में संशोधन इस संभाल करने के लिए (और फिर एक अलग उचित नाम विधि के साथ वर्ग अधिसूचना संभाल), या

  • करने के लिए उचित टिप्पणी जोड़ने भविष्य में संभावित रूप से भ्रमित डेवलपर्स के लाभ के लिए क्या हो रहा है

+0

मुझे लगता है कि आप सही हैं। भविष्य के डेवलपर्स के उदाहरण/कक्षा विधियों के बिंदु को देखने के लिए टिप्पणियां काफी अच्छी होंगी। आपके सहयोग के लिए धन्यवाद। –

1

भाषा स्वयं और रनटाइम आप जो कर रहे हैं उसमें कोई अस्पष्टता नहीं है। तो आप उस मोर्चे पर सुरक्षित हैं।

भ्रमित भविष्य के रखरखाव के मामले में मुझे लगता है कि आपको मूर्खतापूर्ण स्वत: पूर्ण गलतियों से बहुत चिंतित होने की आवश्यकता नहीं है क्योंकि यह एक तरीका नहीं है जिसे आप मैन्युअल कॉल करने का इरादा रखते हैं।

उस ने कहा, मैं कक्षा की सामग्री को कृत्रिम श्रेणी में स्थानांतरित करने के लिए प्रेरित हूं। इससे न केवल पृष्ठ पर अलगाव होगा बल्कि यह स्पष्ट होगा कि वर्ग उदाहरण प्रतिक्रियाओं से कार्यक्षमता की एक अलग किश्त के रूप में प्रतिक्रिया देना चाहता है।

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

  • कोई संबंधित समस्या नहीं^_^