在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];
}
}
这是代码注释的用途:)
Objective C中没有任何问题,类方法和实例方法具有相同的名称。
我会建议:
修改你的通知方法名称规范来处理这个(然后用不同的适当命名的方法处理类通知),或者
添加适当的评论来解释为未来潜在困惑的开发者带来的好处
语言本身和运行时在你所做的事情中不会含糊不清。 所以你在这方面很安全。
在混淆未来的维护者方面,我想你不必太在意愚蠢的自动完成错误,因为它不是你打算进行手动调用的方法。
也就是说,我很想把课程的内容变成一个人造的类别。 这不仅会在页面上分离,而且会明确表示该类打算以实例响应的单独功能作为响应。
链接地址: http://www.djcxy.com/p/66975.html上一篇: Class method and instance method with the same name in Objective