1.动态类型检测方法
/* 动态类型检测的方法 1)判断对象所属关系 (1)判断某一个对象是否是指定类或者该类的子类的对象 (2)判断某一个对象是否是指定的类的实例对象 (3)判断某一个类是否是指定类 的子类 2)判断能否响应方法 1)判断对象能否调用指定的方法 2)判断类中是否有指定的方法 3)应用Select方法 1)没有参数 2)有参数 */
#import <Foundation/Foundation.h> #import "BigYellowDog.h" #import "Cat.h" int main(int argc, const char * argv[]) { @autoreleasepool { // Dog *dog = [Dog new]; // [dog run]; //这种写法会报错 //[(BigYellowDog *)dog lookHome]; id obj; //判断 dog 是 BigYellowDog类或者子类的 实例对象 //格式:[对象 isKindOfClass 类对象]; // YES 1 dog是BigYellowDog 类或者子类的对象 //创建 byd 对象 BigYellowDog *byd = [BigYellowDog new]; //给obj赋值 obj = byd; //定义dog对象 Dog *dog = [Dog new]; //给obj赋值 //obj = dog; //此时检测obj类型是否是BigYellowDog类或者其子类的对象 BOOL b1 = [obj isKindOfClass:[BigYellowDog class]]; // if(b1){ // //如果是BigYellowDog类的对象则,可以调用lookHome方法 // [(BigYellowDog *)obj lookHome]; // } // byd 是动物类的子类的对象 b1 = [byd isKindOfClass:[Cat class]]; //2、检测对象是否是指定类的实例对象 //[对象 isMemberOfClass:指定的类对象]; b1 = [byd isMemberOfClass:[BigYellowDog class]]; //3、检测某个类是否是指定类的子类 // [类A isSubclassOfClass 类B]; // 检测A是否是B类的子类 // [byd class] --> BigYellowDog b1 = [[byd class] isSubclassOfClass: [Animal class]]; //4、判断对象是否能够响应指定的方法 // [对象 respondsToSelector 方法的SEL]; SEL srun = @selector(lookHome); //定义有参数的SEL //srun = @selector(eat:); //检测 byd 对象能否响应 run 方法 b1 = [byd respondsToSelector:srun]; // if(b1){ // [byd lookHome]; // } //5、判断类是否能够响应指定的方法 // [类名 instancesRespondToSelector:方法的SEL]; b1 = [Dog instancesRespondToSelector:srun]; //6、响应方法,(如果能够响应,则调用该方法) // [对象 performSelector:方法的SEL];表示去调用方法 if([byd respondsToSelector:srun]){ //如果能够调用 lookHome ,则调用该方法 [byd performSelector:srun]; } //7、响应方法,(带一个参数) srun = @selector(eat:); //[byd eat:@"热狗"]; [byd performSelector:srun withObject:@"热狗"]; NSLog(@"b1 = %d",b1); } return 0; }
2.构造方法
@implementation Student -(id)init{ //先初始化父类的 if(self = [super init]){ //初始化自己的 _sno = 1; } return self; } @end
3.自定义构造方法
/* 自定义构造方法的规范: 1)一定是对象方法 2)返回值类型一般是 id 类型 3)方法的名称一定是以 initWith //需求:创建人得时候,初始化年龄为指定的年龄 */
@implementation Student -(id)initWithAge:(int)age andName:(NSString *)name andSNO:(int) sno{ //先要初始化父类的 if (self = [super initWithAge:age andName:name]) { //判断是否初始化成功 //初始化当前类的成员变量 _sno = sno; } // 返回值 return self; } @end
时间: 2024-10-08 11:58:23