最近在看IOS的面試題,遇到一個題叫做“類別的作用”,其作用有3:
(1)可以將類的實現分散到多個不同文件或多個不同框架中,方便代碼管理。也可以對框架提供類的擴展(沒有源碼,不能修改)。
(2)創建對私有方法的前向引用:如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯這時使用類別,在類別中聲明這些方法(不必提供方法實現),編譯器就不會再產生警告
(3)向對象添加非正式協議:創建一個NSObject的類別稱為 “創建一個非正式協議”,因為可以作為任何類的委托對象使用。
第1個和第3個好理解,但第2個怎麼理解,我感覺一頭霧水,
首先,第一句話 “如果其他類中的方法未實現”, 為什麼方法未實現,不實現聲明那個方法干什麼
其次,“訪問其他類的私有方法時編譯器報錯這時使用類別”, 聲明這些方法,等於是聲明了一個與該類同名的方法,先前的是private的,這樣做有什麼意義?
誰能幫我解釋一下?
實踐才是檢驗真理的唯一標准,我來舉個栗子吧
首先,我創建一個person類,聲明一個公有方法getAge,和一個私有方法getName
/*********person.h***********/
#import <Foundation/Foundation.h>
@interface person : NSObject
+ (void)getAge;
@end
/*********person.m***********/
#import "person.h"
@interface person ()
+ (void)getName;
@end
@implementation person
+ (void)getAge {
NSLog(@"age:18");
}
+ (void)getName {
NSLog(@"name:XXX");
}
@end
然後正常情況下別的類想要直接調用getName是調用不了的,會報錯
然後我又創建了一個Category,在.h裡聲明方法getName,.m什麼也沒寫
#import "person.h"
@interface person (TEXT)
+ (void)getName;
@end
然後在要調用的類import這個Category,再去運行上圖的代碼,就不會報錯,而且getName的私有方法也執行了
還是不明白的話就自己去試試吧,沒有c幣好痛苦