码迷,mamicode.com
首页 > 其他好文 > 详细

OC的基础语法(六)

时间:2015-10-19 15:27:26      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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

 

OC的基础语法(六)

标签:

原文地址:http://www.cnblogs.com/iosnds/p/4891829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!