Programmatic Object Creation in Objective-C -


below there 2 methods programmatically alloc , init objects of various classes , 'types'.

- (id)buildobjectofclass:(nsstring *)classstring andtype:(nsstring *)typestring     {     id buildobject;     class classname             = nsclassfromstring(classstring);     sel initwithtypeselector    = nsselectorfromstring(@"initwithtype:");      if ([classname instancesrespondtoselector:initwithtypeselector] == yes) {         buildobject = [[classname alloc] performselector:initwithtypeselector                                                withobject: typestring];     }     return buildobject; } 

this method implementation written more tersely simply:
{ return [[classname alloc] initwithtype:typestring]; }

questions are: 1) verbose version necessary? , 2) if so, programmed best be? there shortcuts or best practices neglecting?

the difference between verbose , terse versions of method verbose version validates class instances can respond -initwithtype: not standard nsobject init function.

it unnecessary use verbose version if of following true:

  • you using -init , not -initwithtype:
  • you every class instantiate able handle -initwithtype:
  • you don't mind application unexpectedly quitting unknown method exception if class instantiate not respond -initwithtype:

this version (although should set buildobject nil handle error case explicitly) returns nil if class isn't found or if doesn't respond -initwithtype:. terse version returns nil if class isn't found , throws exception if class instances don't respond -initwithtype:.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

keyboard - C++ GetAsyncKeyState alternative -

android - java.net.UnknownHostException(Unable to resolve host “URL”: No address associated with hostname) -