例如只允许调用- (instancetype)initWithName:(NSString *)name;
NS_UNAVAILABLE :标记方法不可用。Xcode不会自动补全,并且代码中如果调用此方法,会编译报错。但是runtime依然可以调用到此方法。
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
其中 - (instancetype)init NS_UNAVAILABLE;
等同于
- (instancetype)init __attribute__((unavailable));
- (instancetype)init __attribute__((unavailable("请使用initWithName:")));
NS_DESIGNATED_INITIALIZER: designed initializer (指定初始化方法)
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
所以,类的初始化方法如下:
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;
另外,介绍 指定初始化方法与便利初始化方法参考:
https://www.jianshu.com/p/e5dd2eb4ab1b
https://blog.csdn.net/Sico2Sico/article/details/51245573