iOS禁止使用系统方法(禁止使用某个方法)

iOS 中禁止使用某个方法的时候,我们常常会选择重写方法。
例如:

- (instancetype)init {
    @throw [NSException exceptionWithName:@"不能使用init方法"
                                   reason:@"请使用initWithRequestKey:params:或者initWithUrlString:params初始化方法"
                                 userInfo:nil];
    return nil;
}

这样重写方法,还是能调用~

在一些iOS文件中经常能看到NS_DESIGNATED_INITIALIZER,NS_UNAVAILABLE来修饰的方法,下面是MJRefreshConfig里面的一段代码

@interface MJRefreshConfig : NSObject

/** 默认使用的语言版本, 默认为 nil. 将随系统的语言自动改变 */
@property (copy, nonatomic, nullable) NSString *languageCode;

/** @return Singleton Config instance */
+ (instancetype)defaultConfig;

- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;

@end

通过这个案例可以发现使用NS_DESIGNATED_INITIALIZER,NS_UNAVAILABLE来修饰的方法是编译无法通过的~

效果如图:

图 - 1

使用NS_UNAVAILABLE修饰init将会达到禁用init方法的作用 作用如下图:
图 - 2

总结:
使用NS_DESIGNATED_INITIALIZER,NS_UNAVAILABLE将可以禁止系统方法的使用,所以如果你想禁止使用某个方法可以尽量用NS_DESIGNATED_INITIALIZER,NS_UNAVAILABLE来修饰方法

- (instancetype)initWithDelegate:(id)delegate NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;

- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;

你可能感兴趣的:(iOS禁止使用系统方法(禁止使用某个方法))