我正在查看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
,这是一个实例变量,类方法无法使用。
几个问题:
self abandonGalleryCacheAtPath:abc
,则将执行该方法的类版本,如果另一个实例方法调用它,则该方法的实例版本将被执行?sequenceNumber
的值?这种双重实施还有其他设计/技术优势吗? 答案 0 :(得分:2)
由于Objective C使用动态方法绑定,系统将根据进行调用的上下文自动将调用定向到Class或Instance方法。请参阅Objective-C uses dynamic binding, but how?