NS_UNAVAILABLE 与 NS_DESIGNATED_INITIALIZER NS_REQUIRES_SUPER
面对多个初始化方法 不知道哪个方法是正确的方法 这个时候 可以使用NS_UNAVAILABLE 与 NS_DESIGNATED_INITIALIZER来对初始化方法进行描述
- NS_DESIGNATED_INITIALIZER
当所有的初始化方法都走某个特定的初始化方法的时候 用NS_DESIGNATED_INITIALIZER来描述
- (instancetype)initWithTitle:(NSString *)title date:(NSDate *)date NS_DESIGNATED_INITIALIZER;
如果子类实现了NS_DESIGNATED_INITIALIZER描述的初始化方法 那么必须实现父类的NS_DESIGNATED_INITIALIZER方法
- NS_UNAVAILABLE
直接禁用初始化方法
被NS_UNAVAILABLE修饰的初始化方法是不可以被调用的,调用会报错,但是可以被runtime调用
还有以下跟NS_UNAVAILABLE方法类似
// 作用与 NS_UNAVAILABLE 类似
- (id) init __unavailable;
- (id) init __attribute__((unavailable));
- (id) init UNAVAILABLE_ATTRIBUTE;
// 在调用时给出提示
- (id) init __attribute__((unavailable("Must use initWithFoo: instead.")));
- NS_REQUIRES_SUPER
表示子类重写父类方法的时候,在内部必须super这个方法 如果不想调用 也不想出错
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-missing-super-calls"
方法实现
#pragma clang diagnostic pop
网友评论