07-11、自定義類工廠方法+ (instancetype)類名Xxxx:

什么是類工廠方法:

用于快速創(chuàng)建對象的類方法, 我們稱之為類工廠方法
類工廠方法中主要用于 給對象分配存儲空間和初始化這塊存儲空間

規(guī)范:
1.一定是類方法 +
2.方法名稱以類的名稱開頭, 首字母小寫
3.一定有返回值, 返回值是id/instancetype

蘋果的一個規(guī)范(重要)

自定義類工廠方法是蘋果的一個規(guī)范, 一般情況下, 我們會給一個類提供自定義構造方法和自定義類工廠方法用于創(chuàng)建一個對象
// [[NSString alloc] init]; //構造方法創(chuàng)建字符串對象
// [NSString string]; //相對應的類工廠方法創(chuàng)建字符串對象
// [[NSString alloc] initWithString:<#(NSString *)#>];//構造方法創(chuàng)建字符串對象
// [NSString stringWithString:<#(NSString *)#>];//相對應的類工廠方法創(chuàng)建字符串對象
// [[NSArray alloc] init];//構造方法創(chuàng)建數組對象
// [NSArray array];//相對應的類工廠方法創(chuàng)建數組對象
// [NSArray alloc] initWithObjects:<#(id), ...#>, nil//構造方法創(chuàng)建數組對象
// [NSArray arrayWithObjects:<#(id), ...#>, nil]//相對應的類工廠方法創(chuàng)建數組對象

類工廠方法在繼承中的注意點(重要):

// 注意: 以后但凡自定義類工廠方法, 在類工廠方法中創(chuàng)建對象一定不要使用類名來創(chuàng)建
// 一定要使用self來創(chuàng)建
// self在類方法中就代表類對象, 到底代表哪一個類對象呢?
// 誰調用當前方法, self就代表誰

Person.m
#import "Person.h"

@implementation Person


+ (instancetype)person
{
//    return [[Person alloc] init];
// 注意: 以后但凡自定義類工廠方法, 在類工廠方法中創(chuàng)建對象一定不要使用類名來創(chuàng)建
// 一定要使用self來創(chuàng)建
// self在類方法中就代表類對象, 到底代表哪一個類對象呢?
// 誰調用當前方法, self就代表誰
return [[self alloc] init];
}

+ (instancetype)personWithAge:(int)age
{
//    Person *p = [[Person alloc] init];
Person *p = [[self alloc] init];
p.age = age;
return p;
}

@end
main.m
  #import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {

/*
Student *stu = [Student person]; // [[Person alloc] init];
(如果Person的類工廠方法沒有用self后面給no賦值就會報錯,因為no是Student的特有屬性。)
Person *p = [Person person];
//    stu.age = 55;
//    NSLog(@"age = %i", stu.age);
stu.no = 888;
NSLog(@"no = %i", stu.no);
 */
(如果Person的類工廠方法沒有用self后面給no賦值就會報錯,因為no是Student的特有屬性。)
Student *stu = [Student personWithAge:30];
Person *p = [Person personWithAge:30];
stu.no = 888;

return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容