Вы не хотите делать это таким образом, но это возможно:
#include <objc/message.h>
@implementation MyClass
+ (id) factoryMethodWithParameter:(NSString *) someString;
{
struct objc_super instanceSuper;
id myInstance = [self alloc];
instanceSuper.receiver = myInstance;
instanceSuper.super_class = [self superclass];
// instanceSuper.class = [self superclass]; // use this line if the above doesn't compile
myInstance = objc_msgSendSuper (&instanceSuper, @selector(init));
//continue on setting up myInstance's ivars . . .
[myInstance setVariable:someString];
return myInstance;
}
- (id) init
{
self = [super init];
if (!self) return nil;
[self release];
[self doesNotRecogniseSelector:_cmd];
return nil;
}
@end
Это позволит вам продолжать отправлять init
сообщения на myInstance
s & ldquo; super & rdquo; объект, но не позволяет никому отправлять init
в MyClass
экземпляров.
Будьте осторожны, хотя в нем используются стандартные функции времени выполнения, объявленные в objc/*.h
, не ожидайте, что Apple будет поддерживать этот API времени выполнения согласованным.