Метод класса и метод экземпляра с тем же именем в Objective-С
У меня есть решение проблемы с уведомлением, которое хорошо работает, но я боюсь, что это может быть плохой идеей.
У меня есть уведомление о том, что для каждого экземпляра класса и самим классом. Чтобы справиться с этим, я регистрируюсь для уведомления как классом, так и экземплярами класса. Поскольку это одно и то же уведомление, я назвал класс и метод экземпляра одинаковыми. Это соответствует стандарту мы как обработчики уведомлений упомянутый.
это плохая идея? Есть ли какой-то скрытый got'ca, которого мне не хватает. Буду ли я путать черт из будущих разработчиков?
+ (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];
}
}
2 ответов
Это то, что комментарии к коду для :)
в Objective C нет проблем с методом класса и методом экземпляра с одинаковым именем.
Я бы посоветовал либо:
измените спецификацию имени метода уведомления, чтобы обработать это (а затем обработать уведомление класса с другим соответствующим именем), или
добавить соответствующий комментарий, чтобы объяснить, что происходит в интересах будущего потенциально запутанные разработчики
сам язык и среда выполнения не увидят никакой двусмысленности в том, что вы делаете. Так что на этом фронте ты в безопасности.
Что касается путаницы будущих сопровождающих, я думаю, вам не нужно слишком беспокоиться о глупых ошибках автозаполнения, потому что это не метод, к которому вы собираетесь совершать ручные вызовы.
тем не менее, я бы соблазнился переместить материал класса в искусственную категорию. Это не только даст разделение на странице, но и сделает явным, что класс намерен ответьте как отдельный транш функциональности от ответов экземпляра.