C16_OC06-id关键字和构造方法



1.id关键字

#import <Foundation/Foundation.h>

@interface Persion : NSObject
    @property NSString * name;
    @property id obj;           //同@property NSObject * obj;这个属性必须是一个OC对象
    - (void) show:(id)_obj;     //方法的参数为id类型,即任意的NSObject对象
@end

@implementation Persion
    @synthesize name;
    @synthesize obj;
    - (void) show:(id)_obj{
        NSLog(@"参数obj:%@", _obj);
    }
@end

int main(int argc, const char * argv[])
{
    // NSObject * p = [Persion new];
    id p = [Persion new];
    
    //p.name = @"兰草";   //似乎因为NSobject没有name属性,这样不好使
    [p setName:@"菊花"];  //这样却好使
    
    //NSLog(@"植物:%@", p.name);
    NSLog(@"植物:%@", [p name]);
    
    [p setObj:@"这个是id属性"];                  //字符串是NSString对象
    NSLog(@"id属性obj:%@", [p obj]);
    
    [p setObj:[NSNumber numberWithInt:2234]];   //数字对象类型
    NSLog(@"id属性obj:%@", [p obj]);
    
    [p show:[NSString stringWithFormat:@"这是id参数"]];
    
    return 0;
}


2.构造方法

#import <Foundation/Foundation.h>

@interface Persion : NSObject
    {
        NSString * _name;
    }

    @property NSString * name;
    //OC对象的构造方法是init,自定义构造方法命名以initWithXxx格式
    - (id) initWithName:(NSString *)name;
@end

@interface Student : Persion
    /**
    继承了一个_name、一个setName/getName、一个initWithName、init
    **/
@end

@implementation Persion
    @synthesize name = _name;
    /** 重写构造方法
     原则:先初始化父类 **/
    - (id)init{
        if (self = [super init]){   //认定这是构造方法内OC的固定写法
            //这里执行业务
            _name = @"Heeee";
        }
        return self;    //初始化结束,返回自身对象实例
    }
    /** 自定义构造方法 **/
    - (id) initWithName:(NSString *)name{
        if (self = [super init]) {
            _name = name;
        }
        return self;
    }
@end

@implementation Student
    /**
     继承了父类的动态方法
     **/
@end

int main(int argc, const char * argv[])
{
    // NSObject * p = [Persion new];
    Persion * p = [Persion new];
    p.name = @"Alizee";
    NSLog(@"P的Name:%@", p.name);
    
    Persion * per1 = [Persion alloc];   //分配内存空间
    Persion * per2 = [per1 init];       //执行构造方法,初始化
    per2.name = @"Eminem";
    NSLog(@"Per的Name:%@", per2.name);
    
    Persion * persi = [[Persion alloc] init];
    [persi setName:@"Tupac"];
    NSLog(@"Persi的Name:%@", persi.name);
    
    Persion * persion = [[Persion alloc] initWithName:@"Michael"];
    NSLog(@"Persion的Name:%@", persion.name);
    
    Student * s = [[Student alloc] init];
    s.name = @"Student";
    NSLog(@"S的Name:%@", s.name);
    
    Student * student = [[Student alloc] initWithName:@"Manson"];
    NSLog(@"Student的Name:%@", student.name);
    
    return 0;
}

- end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值