我在这里阅读了一个主题 http://www.mikeash.com/pyblog/friday-qa-2010-05-14-what-every-apple-programmer-should-know.html。Mike 说“在调用你自己的类方法时总是使用 [self class]”。但我不明白为什么。能给我举个例子吗 ?
问问题
141 次
2 回答
7
假设您有 class foo
,它具有以下方法:
+(NSString*) bar{ return @"bar"; }
-(NSString*) barMethod{ return [[self class] bar]; }
现在假设你有一个foo2
继承自foo
. 如果你覆盖
+(NSString*) bar { return @"bar2" }
该方法barMethod
将返回bar2
,正如您可能想要的那样。
于 2013-06-24T00:25:50.453 回答
6
与其他 OO 语言不同,Objective-C 中的类方法既可以继承也可以被覆盖。
因此,如果您有:
@immplementation Abstract // : NSObject
- (void) doSomethingClassy
{
[Abstract classyThing];
}
+ (void) classyThing
{
... some classy code ...;
}
@end
@interface Concrete : Abstract
@end
@implementation Concrete
+ (void) classyThing
{
... some classy code ...;
[super classThing];
}
@end
那么这不会+classyThing
从抽象的实现中调用具体的doSomethingClassy
:
[[[Concrete alloc] init] doSomethingClassy];
而如果你修改doSomethingClassy
它[[self class] classyThing];
会按预期工作。
(请注意,这是张立业回答的一个具体例子——请随意将他的正确标记为他的第一个,只是没有那么具体的例子)
于 2013-06-24T00:46:47.880 回答