什么是类工厂方法:
用于快速创建对象的类方法,我们称之为类工厂方法
类工厂方法中主要用于 给对象分配你诶村空间和初始化这块内存空间
规范:
1.一定是类方法
2.方法名称以类的名称开头,首字母小写
3.一定有返回值,返回值是id/instancetype
4.在类工厂方法,
+(instancetype)personWithAge:(int)age;
自定义工厂方法时苹果的一个规范,一般情况下,我们会给一个类提供自动那个一够着房和自定义工厂额房用于创建一个对象
类工厂方法一定要要继承父类 init 使用self调用
类工厂方法和构造方法建议配合使用
#import <Foundation/Foundation.h>
#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 <Foundation/Foundation.h>
@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 <Foundation/Foundation.h>
#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
类工厂方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- new方法实现原理 new做了三件事情1.开辟存储空间 + alloc 方法2.初始化所有的属性(成员变量) -...
- 什么是类工厂方法: 用于快速创建对象的类方法, 我们称之为类工厂方法类工厂方法中主要用于 给对象分配存储空间和初始...
- 1.自定义工厂方法 什么是工厂方法(快速创建方法)类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方...