这个专题主要讲通过协议提供匿名对象,主要就是以匿名对象来表示从另一个类中返回对象,因为不同的对象处理的问题不一样。
协议代码如下:
@protocol CarProtocol
-(void)carDriver;
@end
遵从CarProtocol协议的类,就是具体的车子代码如下:
//.h文件实现
@interface CCar:NSObject<CarProtocol>
@end
//.m文件实现
#import"CCar.h"
@interface CCar()
@end
@implementation CCar
//实现协议中开车方法
- (void)carDriver {
NSLog(@"carDriver");
}
实现车子的工厂方法如下:
@interface CCarFactory:NSObject
+ (instancetype)shareInstance;
/**通过协议提供匿名对象,返回的车具体不知道是什么类型,我们不关注,只要是车就行**/
- (id)createCarWithName:(NSString*)carName;
@end
@implementation CCarFactorystaticidinstance
+ (instancetype)shareInstance {
staticdispatch_once_tpredicate;
dispatch_once(&predicate, ^{
instance = [[CCarFactory alloc] init];
});
return instance;
}
- (id<CarProtocol>)createCarWithName:(NSString*)carName {
if(carName iseqstring:@"CCar"){
CCar *car = [[CCar alloc] init];
[car carDriver];
return car;
}
return nil;
}
@end
这样只要调用工厂类CCarFactory,然后根据传入的不同类名,就可以创建不同类,,还有CCarFactory只是一个中转站,组装还是要看各个实现的方法。
在不同的地方使用如下:
id<CarProtocol> = [[CCarFactory shareInstance] createCarWithName:@"火车"];
[car carDrive];
主要讲的就是匿名类的调用,具体的类型不重要。
网友评论