目标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]; }