我们模拟一个抽象类: People,下面是.h文件
#import <Foundation/Foundation.h>
//抽象类,不能直接实例化,需要子类继承才能初始化
@interface People : NSObject
//抽象方法,不能直接调用,需要子类重写方法
- (id)doSomething:(id)arg;
@end
下面是.m文件
#import "People.h"
@implementation People
- (instancetype)init {
//禁止调用People类的实例方法
if([self isMemberOfClass:[People class]]){
//doesNotRecognizeSelector:告诉系统某个方法没有实现,并且抛出异常
//也就是说子类必须要重写init方法才行
//_cmd在Objective-C的方法中表示当前方法的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:方法,否则会crash
[self doesNotRecognizeSelector:_cmd];
return nil;
}
@end