1 /* 2 类工厂方法:用于分配、初始化实例并返回一个它自己实例的方法,允许你使用一个步骤就能创建对象,比如new 方法 3 用于快速创建对象的类方法, 我们称之为类工厂方法 4 类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间 5 1、是类方法,必须以 + 开头; 6 2、返回类型是 instancetype/id类型; 7 3、方法名是首字母小写的类名。 8 */ 9 //Person.h 10 #import <Foundation/Foundation.h> 11 @interface Person : NSObject 12 13 @property age; 14 //无参工厂类方法 15 + (instancetype)person; 16 //有参数工厂类方法 17 + (instancetype)personWithAge:(int)age; 18 @end 19 20 //Person.m 21 #import "Person.h" 22 @implementation Person 23 24 + (instancetype)person 25 { 26 //return [[Person alloc] init]; 27 // 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建,要使用self来创建 28 // self在类方法中就代表类对象,谁调用当前方法, self就代表谁 29 return [[self alloc] init]; 30 } 31 32 + (instancetype)personWithAge:(int)age 33 { 34 Person *p = [[Person alloc] init]; 35 p.age = age; 36 return p; 37 } 38 @end 39 40 //Student.h 41 #import <Foundation/Foundation.h> 42 43 @interface Student : Person 44 45 @property int no; 46 47 @end 48 49 //Student.m 50 #import "Student.h" 51 52 @implementation Student 53 54 @end 55 56 //main.m 57 #import <Foundataion/Foundation.h> 58 #import “Person.h” 59 60 int main(int argc, const char * argv[]) 61 { 62 63 Person *p = [Person person]; 64 p.age = 44; 65 NSLog(@"age = %i",p.age); 66 67 Student *stu = [Student person]; 68 stu.no = 22; //person 方法 要使用self 来创建,否则这里会报错:父类的类中 没有 no 属性,要用self来创建 指向子类Student 69 NSLog(@"age = %i",stu.no); 70 71 return 0; 72 }
时间: 2024-10-05 05:04:55