不能指定实例的初始化方法,是OC的一个缺陷。你无法在语法上面指定实例的初始化方法,例如你什么时候都可以调用init方法去初始化一个实例,这就导致一些实例初始化的时候没办法获得必要地参数。
为了解决这个问题,目前可以通过编译器声明达到,如下
- (instancetype)init __attribute__((unavailable("Invoke initWithOperation: instead."))); - (instancetype)initWithOperation:(NSOperation *)operation dispatchQueue:(dispatch_queue_t)dispatchQueue NS_DESIGNATED_INITIALIZER;
__attribute__((unavailable("Invoke initWithOperation: instead.")))
NS_DESIGNATED_INITIALIZER