Mam rozwiązanie problemu z powiadomieniem, który działa dobrze, ale obawiam się, że może to być zły pomysł.Metoda klasy i metoda instancji o tej samej nazwie w Objective-C
Mam powiadomienie, które musi być obsługiwane przez każde wystąpienie klasy i przez samą klasę. Aby sobie z tym poradzić, rejestruję się w powiadomieniu zarówno przez klasę, jak i instancje klasy. Ponieważ jest to dokładnie to samo powiadomienie, nazwa klasy i metoda instancji są takie same. Jest to zgodne ze standardem, który ustaliliśmy dla nazw procedur obsługi powiadomień.
Czy to zły pomysł? Czy jest jakaś ukryta got'ca, której mi brakuje. Czy pomylę się z przyszłymi deweloperami?
+ (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 pytanie. Nie mam tysiąca punktów, ale mogę powiedzieć, że metody instancji i klasy nie będą sprzeczne, ponieważ ich potrzeby i implementacja są bardzo różne. –