应用场景: 有时对象类型 并不重要,重要的是 对象有没有实现某些方法,在此情况下级可以使用 匿名类型 来表达这一概念。
例子如下:
#import <Foundation/Foundation.h>
@protocol EOCDatabaseConnection;
@interface EOCDatabaseManager : NSObject
+ (id)sharedInstance;
- (id<EOCDatabaseConnection>)connectionWithIdentifier:(NSString *)identifier;
@end
@protocol EOCDatabaseConnection <NSObject>
- (void)connect;
- (void)disconnect;
- (BOOL)isConnected;
- (NSArray *)performQuery:(NSString *)query;
@end
在本例子中 处理数据库连接所用的后端代码 可能使用了 各种第三方库 俩连接不同的数据库 可能是SQlite 可能是 MySQL 等由于这些类 多在第三方库中,没有办法令所有的类都继承自同一个基类。 实际上我们创建了 匿名对象 我们并不关心她的类型 只关心 是否遵循了相应的协议。 id<EOCDatabaseConnection> 就是 匿名对象。 在开发后续版本的时候无须 改变公共的API 。即可切换后端的实现类。