Using [self class] is really a waste in this case - M1 and M3 are not really different from each other unless you have subclasses, and the reality is that the rest of the implementation cannot handle it.
Consider what happens if you subclass ReactorClass as follows:
@interface MyReactorClass : ReactorClass {}
@end
@implementation MyReactorClass
@end
[MyReactorClass sharedInstance], , sharedReactor. , , , , , , , . , , M3 , , : " ?" - , , , .
, ( + ) , .
, alloc allocWithZone: , , , , , , . singleton, DOCUMENT, , , , .
, init, (ok, _init) - , , singleton, .
, " ". , , , , .. , , , . Apple ; , .