目标C:给定一个类ID,我可以检查这个类是否实现了某个协议? 或者有一个确定的select器?
我想用这个对象工厂:给定一个string,创build一个类,如果这个类支持一个协议(与一个Create()方法)然后分配类,并调用创build。
Class klass = NSClassFromString(classname); if ([klass instancesRespondToSelector:@selector(create)]) { [[klass alloc] create]; }
但是,我可以指出,通过这样做你打破了多less糟糕的Objective-C规则? 例如,你不应该在分配但未初始化的实例上调用方法。 Xcode静态分析器会给你关于内存泄漏的各种警告。
更好的select是这样的:
[[[klass alloc] init] create];
但是你似乎暗示你不想调用init。
你可以考虑一个类方法: [klass create]
,它将返回一个非拥有的klass
实例。 然后你只需在调用之前检查[klass respondsToSelector:@selector(create)]
。
NSString *className; //assume this exists Class class = NSClassFromString(className); if ([class conformsToProtocol:@protocol(SomeProtocol)]) { id instance = [[class alloc] init]; [instance create]; }