Да, в зависимости от того, что вы действительно делаете. ObjC не имеет «конструкторов» на уровне языка таким же образом - существуют методы init
, которые обычно вызываются вместе с методом alloc
создания экземпляров, но обратите внимание, что init
существует в соответствии с рамочным соглашением, а не спецификацией, поэтому среда выполнения не «знает», какой «конструктор» вы хотите вызвать.
Вы можете создать экземпляр объекта (эквивалент его выделения) следующим образом:
id myObj = class_createInstance(NSClassFromString(@"MyClass"));
хотя вы могли бы сделать это более напрямую:
id myObj = [NSClassFromString(@"MyClass") alloc];
Но тогда вам все равно нужно вызывать любой init
метод, который вам нужен. Если вы не хотите делать это напрямую, вам нужно знать селектор метода, чтобы вы могли отправить объекту правильное сообщение. Селектор является статическим представлением подписи сообщения. Вы можете вызвать этот метод через API времени выполнения следующим образом:
myObj = objc_msgSend(myObj, @selector(initWithStr1:str2:str3), myString1, myString2, myString3);
// Check myObj for nil which means a failed init.
Ссылка на время выполнения ObjC: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html