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;
}

 

posted @ 2015-06-09 18:44  sirzhang  阅读(239)  评论(0编辑  收藏  举报
AmazingCounters.com