类工厂方法


什么是类工厂方法:
用于快速创建对象的类方法,我们称之为类工厂方法
类工厂方法中主要用于 给对象分配你诶村空间和初始化这块内存空间

规范:
1.一定是类方法
2.方法名称以类的名称开头,首字母小写
3.一定有返回值,返回值是id/instancetype
4.在类工厂方法,


+(instancetype)personWithAge:(int)age;
自定义工厂方法时苹果的一个规范,一般情况下,我们会给一个类提供自动那个一够着房和自定义工厂额房用于创建一个对象
类工厂方法一定要要继承父类 init  使用self调用
类工厂方法和构造方法建议配合使用
#import 
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
    /*
     什么是类工厂方法:
     用于快速创建对象的类方法, 我们称之为类工厂方法
     类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间
     
     规范:
     1.一定是类方法 +
     2.方法名称以类的名称开头, 首字母小写
     3.一定有返回值, 返回值是id/instancetype
     */
    
    Person * p = [Person personWithAge:15];
    NSLog(@"%@",p);
    Student *stu = [Student studentWithAge:15 andNo:20];
    NSLog(@"%@",stu);
    return 0;
}
#import 

@interface Person : NSObject
@property int age;
+(instancetype)personWithAge:(int)age;
- (instancetype)initWithAge:(int)age;
@end
#import "Person.h"

@implementation Person

//    return [[Person alloc] init];
// 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建
// 一定要使用self来创建
// self在类方法中就代表类对象, 到底代表哪一个类对象呢?
// 谁调用当前方法, self就代表谁
//自定义构造方法
- (instancetype)initWithAge:(int)age
{
    if (self = [super init]) {
        _age = age;
    }
    return self;
}
//配套的类工厂方法
+(instancetype)personWithAge:(int)age
{
    //    Person *p = [[Person alloc] init];
    //    Person *p = [[self alloc] init];
    //    p.age = age;
    //    return p;
    //用一个匿名对象调用本类的自定义构造方法
    return [[self alloc]initWithAge:age];
}
//重写description方法,改变描述
- (NSString *)description
{
    return [NSString stringWithFormat:@"年龄=%i",_age];
}
@end
#import 
#import "Person.h"
@interface Student : Person
@property int no;
+ (instancetype)studentWithAge:(int)age andNo:(int)no;
- (instancetype)initWithAge:(int)age andNo:(int)no;
@end
#import "Student.h"

@implementation Student
+ (instancetype)studentWithAge:(int)age andNo:(int)no
{   
    return [[self alloc]initWithAge:age andNo:no];
}
//自定义构造方法
- (instancetype)initWithAge:(int)age andNo:(int)no
{
    if (self = [super initWithAge:age]) {
        _no = no;
    }
    return self;
}
- (NSString *)description
{
    return [NSString stringWithFormat:@"年龄=%i学号=%i",[self age],_no];
}
@end

你可能感兴趣的:(类工厂方法)