OC5_构造方法与self指针

//

//  Dog.h

//  OC5_构造方法与self指针

//

//  Created by zhangxueming on 15/6/9.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import <Foundation/Foundation.h>



@interface Dog : NSObject

{

    NSString *_name;

    NSInteger _age;

}

//必须以 initWithXXX开头

//在一个类里面可以有多个构造方法, 但是一个对象只可以调用一次构造方法



//无参数

- (id)init;//返回对象的地址



//带一个参数

- (id)initWithName:(NSString *)name;

- (id)initWithAge:(NSInteger)age;



//带两个参数

- (id)initWithName:(NSString *)name andAge:(NSInteger)age;



//getter方法

- (NSString *)name;



- (NSInteger)age;



//setter方法

- (void)setName:(NSString *)name andAge:(NSInteger)age;



//类方法

+ (void)testDog;



@end
//

//  Dog.m

//  OC5_构造方法与self指针

//

//  Created by zhangxueming on 15/6/9.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import "Dog.h"



@implementation Dog



- (instancetype)init

{

    if (self = [super init]) {//引用父类方法的编译器符号

    }

    return self;

}



- (id)initWithName:(NSString *)name

{

    if (self = [super init]) {

        _name = name;

    }

    return self;

}



- (id)initWithAge:(NSInteger)age

{

    if (self = [super init]) {

        _age = age;

    }

    return self;

}



- (id)initWithName:(NSString *)name andAge:(NSInteger)age

{

    if(self = [super init])

    {

        _name = name;

        _age = age;

    }

    return self;

}



- (NSString *)name

{

    return _name;

}



- (NSInteger)age

{

    return _age;

}



- (void)setName:(NSString *)name andAge:(NSInteger)age

{

    _name = name;

    _age = age;

}



+(void)testDog

{

    Dog *xiaoHei = [[self alloc] initWithName:@"小黑" andAge:12 ];

    NSLog(@"name = %@ age = %li", [xiaoHei name], [xiaoHei age]);

}



@end
//

//  main.m

//  OC5_构造方法与self指针

//

//  Created by zhangxueming on 15/6/9.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#import <Foundation/Foundation.h>

#import "Dog.h" 

//1.#ifndef "Dog.h" #define "Dog.h"  #endif,防止头文件被重定义

//2.@class 打断循环链 防止循环包含



int main(int argc, const char * argv[]) {

    @autoreleasepool {

        [Dog testDog];

        

        Dog *xiaoBai = [[Dog alloc] init];

        [xiaoBai setName:@"小白" andAge:15];

        NSLog(@"name = %@ age = %li", [xiaoBai name], [xiaoBai age] );

        

         

    }

    return 0;

}

 

你可能感兴趣的:(构造方法)