iOS 中禁止使用某個(gè)方法的時(shí)候奶浦,我們常常會(huì)選擇重寫方法。
例如:
- (instancetype)init {
@throw [NSException exceptionWithName:@"不能使用init方法"
reason:@"請(qǐng)使用initWithRequestKey:params:或者initWithUrlString:params初始化方法"
userInfo:nil];
return nil;
}
這樣重寫方法捎迫,還是能調(diào)用~
在一些iOS文件中經(jīng)常能看到NS_DESIGNATED_INITIALIZER
,NS_UNAVAILABLE
來(lái)修飾的方法刷喜,下面是MJRefreshConfig里面的一段代碼
@interface MJRefreshConfig : NSObject
/** 默認(rèn)使用的語(yǔ)言版本, 默認(rèn)為 nil. 將隨系統(tǒng)的語(yǔ)言自動(dòng)改變 */
@property (copy, nonatomic, nullable) NSString *languageCode;
/** @return Singleton Config instance */
+ (instancetype)defaultConfig;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
@end
通過(guò)這個(gè)案例可以發(fā)現(xiàn)使用NS_DESIGNATED_INITIALIZER
,NS_UNAVAILABLE
來(lái)修飾的方法是編譯無(wú)法通過(guò)的~
效果如圖:
使用
NS_UNAVAILABLE
修飾init
將會(huì)達(dá)到禁用init
方法的作用 作用如下圖:總結(jié):
使用NS_DESIGNATED_INITIALIZER
,NS_UNAVAILABLE
將可以禁止系統(tǒng)方法的使用,所以如果你想禁止使用某個(gè)方法可以盡量用NS_DESIGNATED_INITIALIZER
,NS_UNAVAILABLE
來(lái)修飾方法
- (instancetype)initWithDelegate:(id<JXPagerViewDelegate>)delegate NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;