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