Objective C : Given a Class id, can I check if this class implements a certain protocol? Or has a certain selector? Objective C : Given a Class id, can I check if this class implements a certain protocol? Or has a certain selector? objective-c objective-c

Objective C : Given a Class id, can I check if this class implements a certain protocol? Or has a certain selector?


NSString *className; //assume this existsClass class = NSClassFromString(className);if ([class conformsToProtocol:@protocol(SomeProtocol)]) {    id instance = [[class alloc] init];    [instance create];}


Class klass = NSClassFromString(classname);if ([klass instancesRespondToSelector:@selector(create)]) {  [[klass alloc] create];}

May I, however, point out just how many awful Objective-C rules you're breaking by doing the above? For example, you should never be calling methods on an allocated-but-not-initialized instance. The Xcode Static Analyzer will give you all sorts of warnings about memory leaks.

A better option would be this:

[[[klass alloc] init] create];

But you seem to imply that you don't want to call init.

You could consider a class method: [klass create], which would return a non-owned instance of klass. Then you'd just check [klass respondsToSelector:@selector(create)] before calling it.