之前在 博客园 用 为你前行 的昵称曾经写过一篇关于 便利化初始化函数 和 便利构造器 的博客,博客搬家没有搬过来,所以就在这里从重新写一下,最新的便利初始化函数和便利构造器的想法。
有过面向对象的基础的话,可以当成构造函数来学习,但是又有些区别。
依旧用Student类来说明:
以下是Student.h的头文件
// // Student.h // OC_initTest // // Created by Mac on 15/7/31. // Copyright (c) 2015年 yue. All rights reserved. // #import <Foundation/Foundation.h> @interface Student : NSObject //定义属性 @property NSString *studentName; //学生姓名 @property int age; //学生年龄 //含姓名参数和年龄参数的构造函数(便利构造初始化函数) -(instancetype) initWithName:(NSString *)name andWithAge:(int)age; //便利构造器(是类方法) +(instancetype) studentWithName:(NSString *)name andWithAge:(int)age;//便利构造器一般命名的开头是类名 @end
然后就是Student.m的实现文件
// // Student.m // OC_initTest // // Created by Mac on 15/7/31. // Copyright (c) 2015年 yue. All rights reserved. // #import "Student.h" @implementation Student //含姓名参数和年龄参数的构造函数(便利构造初始化函数) -(instancetype) initWithName:(NSString *)name andWithAge:(int)age { if (self = [super init]) { [self setStudentName:name]; [self setAge:age]; } return self; } //便利构造器(是类方法) +(instancetype) studentWithName:(NSString *)name andWithAge:(int)age { __autoreleasing Student *student = [[Student alloc] initWithName:name andWithAge:age]; return student; } @end
接下来是main.m文件
// // main.m // OC_initTest // // Created by Mac on 15/7/31. // Copyright (c) 2015年 yue. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" int main(int argc, const char * argv[]) { //之前的定义方法 Student *student = [[Student alloc]initWithName:@"小明" andWithAge:19]; //用便利构造器 /* 可以看出用便利构造器定义的对象的代码量少了 以前便利构造器的地位很重要,但现在也不是那么重要了 以前用便利构造器方便是因为是手动控制内存的释放,但现在是自动释放 因此便利构造器的地位不是那么的重要了,只需要知道用法即可 */ Student *student1 = [Student studentWithName:@"小明" andWithAge:19]; return 0; }