// Created by Stephen on 16/3/2.
// Copyright © 2016年 Stephen. All rights reserved.
//
// 回顾上一章节Person 类的 set 和 get 方法 现在我们自己来写一个构造方法,来实现初始化的时候 Person 类的两个私有变量可以被赋值
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int _height; } -(id)initWithAge:(int)age andHeight:(int)height; // 自定义的构造方法,是一个动态方法 - (void)showInfo; @end
Person.m
// Created by Stephen on 16/3/2. // Copyright © 2016年 Stephen. All rights reserved. // #import "Person.h" @implementation Person // 实现自定义的构造方法 -(id)initWithAge:(int)age andHeight:(int)height // id 类型也是约定俗成的 { //先从父类那初始化 固定模板 self = [super init]; if(self !=nil){ _age = age; _height = height; } return self; } -(void) showInfo{ NSLog(@"name is %d and age is %d",_age, _height); } @end
这里我们看到了,初始化方法返回的类型是id类型,关于OC中的id类型,可以认为和C语言中的void*是相等的,这种类型在OC中经常被用到,还有就是self关键字的使用,这里的self关键字就相当于Java中的this关键字,指代当前类对象,还有super关键字,这个和Java中的super也是一样的,指代父类对象。还有一个是nil,他就相当于Java中的null,空对象的概念,用于判断的。
同时这里还要记住一点:
以后OC中自定义初始化的方法的模板:
- //固定写法,可以背下来哦~~
- //调用父类的初始化方法
- self = [super init];
- if(self != nil){
- _name = name;
- _age = age;
- }
- return self;
这个没什么好说的,就是一个模板,所以初学者就背下来吧,不过用多了,自然就记住了。
main.m
//
//
// Created by Stephen on 16/3/2.
// Copyright © 2016年 Stephen. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Person *person = [[Person alloc]init];
//person.age = 20;
//person.height = 50;
Person *person =[[Person alloc]initWithAge:20 andHeight:180];
[person showInfo];
//NSLog(@"age = d% height = d%",person.age , person.height);
}
return 0;
}
运行结果:
2016-03-02 22:23:17.656 4.构造方法[1723:45115] name is 20 and age is 180
Program ended with exit code: 0