2012-12-06 14 views
7

'da aynı adı taşıyan sınıf yöntemi ve örnek yöntemi İyi çalışan bir bildirim sorunu için bir çözüm var, ama korkarım kötü bir fikir olabilir.Objective-C

Bir sınıfın her örneği ve sınıfın kendisi tarafından ele alınması gereken bir bildirim aldım. Bunu işlemek için, hem sınıfın hem de sınıfın örneklerine göre bir bildirim için kayıt yapıyorum. Aynı bildirim olduğu için, sınıf ve örnek yöntemini aynı şekilde adlandırdım. Bu, bildirim işleyicilerinin nasıl adlandırıldığını belirlediğimiz standardı izler.

Bu kötü bir fikir mi? Kaybolduğum bir saklı var. Gelecekteki geliştiricilerin dikkatini dağıtacağım mı?

+ (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

Süper soru. Binlerce puanım yok, ama diyebilirim ki, ihtiyaç ve uygulama çok farklı olduğundan, örnek ve sınıf yöntemleri çatışmayacak. –

cevap

3

Bu kod yorumları, sınıf yöntemi ve aynı adı taşıyan örnek yöntemi ile Objective C hiçbir problem var :)

içindir budur.

Önerim ya olacaktır:

  • bu işi (ve daha sonra farklı bir biçimde adlandırılması yöntemi ile sınıf bildirimi işlemek) için bildirim yöntemi adı spec değiştirebilir veya

  • uygun yorum eklemek gelecekteki potansiyel olarak karışık geliştiricilerin yararı için neler olduğunu açıklar

+0

Sanırım haklısın. Yorumlar, gelecekteki geliştiricilerin örnek/sınıf yöntemlerinin noktasını görmesi için yeterince iyi olacaktır. Girdiniz için teşekkürler. –

1

Dilin kendisi ve çalışma zamanı se Yaptığın şeyde bir belirsizlik yok. Yani bu cephede güvendesin.

Gelecekte bekçilerin kafa karıştırıcıları açısından, sanırım, otomatik olarak yapılan tamamlama hatalarıyla ilgili endişelenmenize gerek yok çünkü manuel arama yapmak istediğiniz bir yöntem değil.

Bu, sınıf malzemelerini yapay bir kategoriye taşımak için cazip gelebilirim dedi. Bu, yalnızca sayfada ayrılık vermekle kalmaz, aynı zamanda sınıfın örnek yanıtlardan ayrı bir işlev dilimi olarak yanıt vermeyi amaçladığını açıklığa kavuşturur.