- 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng)。
須讀:看完該文章你能做什么?
能學(xué)會(huì)基本創(chuàng)建類工廠方法
學(xué)習(xí)前:你必須會(huì)什么?
什么是類,什么是類方法
1.什么是類[替換鏈接 Day01-05-類與對(duì)象],什么是類方法[替換鏈接 Day01-09-第一個(gè)OC類方法
]
生活中描述事物無(wú)非就是描述事物的名稱、屬性和行為
人:年齡、身高、體重
程序如何表現(xiàn)一個(gè)類(下面只不過是簡(jiǎn)單的一個(gè)聲明而已):
@interface Person : NSObject
{
int _age;//年齡
}
// 行為
- (void)eat;// 對(duì)象方法 需要實(shí)例化一個(gè)對(duì)象 才能調(diào)用 [[Person new] eat];
+ (void)eat;// 類方法以+開頭 直接使用類調(diào)用 [Person eat];
@end
一、本章筆記
一、
什么是類工廠方法:
用于快速創(chuàng)建對(duì)象的類方法,我們稱之為類工廠方法
類工廠方法中 主要用于 給對(duì)象分配存儲(chǔ)空間 和 初始化這塊存儲(chǔ)空間
規(guī)范:
1.一定是類方法
2.方法名 以類的名稱開頭, 首字母小寫
3.一定有返回值, 返回值是 id/instancetype
二、
自定義類工廠方法 是蘋果的一個(gè)規(guī)范,
一般情況下,我們會(huì)給一個(gè)類提供自定義構(gòu)造方法 和自定義類工廠方法
用于創(chuàng)建一個(gè)對(duì)象
二、code
main.m
#pragma mark 14-類工廠方法基本概念
#pragma mark 概念
/*
一、
什么是類工廠方法:
用于快速創(chuàng)建對(duì)象的類方法,我們稱之為類工廠方法
類工廠方法中 主要用于 給對(duì)象分配存儲(chǔ)空間 和 初始化這塊存儲(chǔ)空間
規(guī)范:
1.一定是類方法
2.方法名 以類的名稱開頭, 首字母小寫
3.一定有返回值, 返回值是 id/instancetype
二、
自定義類工廠方法 是蘋果的一個(gè)規(guī)范,
一般情況下,我們會(huì)給一個(gè)類提供自定義構(gòu)造方法 和自定義類工廠方法
用于創(chuàng)建一個(gè)對(duì)象
*/
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person.h"
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
// Person *p = [Person person];
// p.age = 20;
// NSLog(@"age = %i",p.age);
Person *p = [Person personWithAge:33];
NSLog(@"age = %i",p.age);
// [[NSString alloc]init];
// [NSString string];
// [NSString alloc]initWithString:<#(nonnull NSString *)#>
// [NSString stringWithString:<#(nonnull NSString *)#>]
// [[NSArray alloc]init];
// [NSArray array];
// [NSArray alloc]initWithObjects:<#(nonnull id), ...#>, nil
// [NSArray arrayWithObjects:<#(nonnull id), ...#>, nil]
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property int age;
/*
什么是類工廠方法:
用于快速創(chuàng)建對(duì)象的類方法,我們稱之為類工廠方法
類工廠方法中 主要用于 給對(duì)象分配存儲(chǔ)空間 和 初始化這塊存儲(chǔ)空間
規(guī)范:
1.一定是類方法
2.方法名 以類的名稱開頭, 首字母小寫
3.一定有返回值, 返回值是 id/instancetype
*/
+ (instancetype)person;
+ (instancetype)personWithAge:(int)age;
@end
>>>.m
#import "Person.h"
@implementation Person
/*
+ (instancetype)person
{
Person *p = [Person alloc];
Person *p1 = [p init];
return p1;
}
*/
+ (instancetype)person
{
return [[Person alloc]init];
}
+ (instancetype)personWithAge:(int)age
{
Person *p = [[Person alloc]init];
p.age = age;
return p;
}
@end