类簇就是具有相同接口,并提供相同功能的一组类的集合。
类簇包括两种类,一种是公共类(指的是仅公开接口的抽象类),二是具体类,这些具体类的接口,由公共类的接口抽象化。
具体类不能被直接使用,他们一般是作为公共类的子类进行实现的(也称之为私有子类)
实际上,在编码中,公共类和具体类使用方法是一样的。
实现某个类的方法并不是一定的。类簇会挑选出某种情况下最好的类去实现。
我们以NSString为例来说明:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str = @"hello world";
NSLog(@"%@",[str class]);
str = [str stringByAppendingString:@"hehe"];
NSLog(@"%@",[str class]);
str = [NSString stringWithUTF8String:"hello"];
NSLog(@"%@",[str class]);
}
return 0;
}
输出结果是:
从结果我们可以看出,对于NSString这个类,当用不同的方式去实现的时候,调用的类是不一样的,类簇会选择在此种情况下最合适的类。