Ho una soluzione per un problema di notifica che funziona bene, ma temo che potrebbe essere una cattiva idea.Metodo di classe e metodo di istanza con lo stesso nome in Objective-C
Ho una notifica che deve essere gestita da ciascuna istanza di una classe e dalla classe stessa. Per gestirlo, mi sto registrando per una notifica sia dalla classe che dalle istanze della classe. Poiché è la stessa identica notifica, ho chiamato la classe e il metodo di istanza allo stesso modo. Questo segue lo standard che abbiamo impostato per il modo in cui i gestori di notifica sono nominati.
Questa è una cattiva idea? C'è qualche gotca nascosta che mi manca. Riuscirò a confondere il diavolo con i futuri sviluppatori?
+ (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];
}
}
Super domanda. Non ho migliaia di punti, ma posso dire che i metodi di istanza e classe non entreranno in conflitto, poiché le loro necessità e la loro implementazione sono molto diverse. –