iOS 一个类只允许外部调用特定初始化方法来初始化

问题:一个类只想让外部调用特定初始化方法来初始化

例如只允许调用
- (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

你可能感兴趣的:(iOS)