具有相同名称的类和实例方法

时间:2011-11-24 11:58:39

标签: objective-c

我正在查看Apple的MVC Networking sample project,我发现在课程PhotoGallery中,作者已创建方法abandonGalleryCacheAtPath:的实例和类版本:

第139行:

+ (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath

第457行:

- (void)abandonGalleryCacheAtPath:(NSString *)galleryCachePath

该方法的所有实例版本似乎都是在调用类方法之前进行了一些记录,如下所示:

[[QLog log] logWithFormat:@"gallery %zu abandon '%@'", (size_t) self.sequenceNumber, [galleryCachePath lastPathComponent]];
[[self class] abandonGalleryCacheAtPath:galleryCachePath];

日志消息包含self.sequenceNumber,这是一个实例变量,类方法无法使用。

几个问题:

  1. 系统会自动将呼叫定向到正确的方法,例如如果另一个方法调用self abandonGalleryCacheAtPath:abc,则将执行该方法的类版本,如果另一个实例方法调用它,则该方法的实例版本将被执行?
  2. 你认为作者是否完全实现了实例方法,以便记录sequenceNumber的值?这种双重实施还有其他设计/技术优势吗?

1 个答案:

答案 0 :(得分:2)

由于Objective C使用动态方法绑定,系统将根据进行调用的上下文自动将调用定向到Class或Instance方法。请参阅Objective-C uses dynamic binding, but how?