美文网首页
iOS禁止使用系统方法(禁止使用某个方法)

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

作者: 尼古拉斯佩思 | 来源:发表于2020-05-19 19:08 被阅读0次

    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<JXPagerViewDelegate>)delegate NS_DESIGNATED_INITIALIZER;
    
    - (instancetype)init NS_UNAVAILABLE;
    
    - (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
    
    - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
    
    

    相关文章

      网友评论

          本文标题:iOS禁止使用系统方法(禁止使用某个方法)

          本文链接:https://www.haomeiwen.com/subject/xfovohtx.html