我們模擬一個(gè)抽象類: People,下面是.h文件
#import <Foundation/Foundation.h>
//抽象類,不能直接實(shí)例化,需要子類繼承才能初始化
@interface People : NSObject
//抽象方法,不能直接調(diào)用,需要子類重寫方法
- (id)doSomething:(id)arg;
@end
下面是.m文件
#import "People.h"
@implementation People
- (instancetype)init {
//禁止調(diào)用People類的實(shí)例方法
if([self isMemberOfClass:[People class]]){
//doesNotRecognizeSelector:告訴系統(tǒng)某個(gè)方法沒有實(shí)現(xiàn),并且拋出異常
//也就是說子類必須要重寫init方法才行
//_cmd在Objective-C的方法中表示當(dāng)前方法的selector,這里就是表示init方法
[self doesNotRecognizeSelector:_cmd];
return nil;
}else{
self = [super init];
if(self){
}
return self;
}
}
- (id)doSomething:(id)arg
{
NSLog(@"%@",NSStringFromSelector(_cmd));
//_cmd,這里就表示doSomething:方法
//子類必須重寫doSomething:方法,否則會(huì)crash
[self doesNotRecognizeSelector:_cmd];
return nil;
}
@end