//
// 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;
}
转载于:https://www.cnblogs.com/0515offer/p/4564278.html