標籤:
協議(@protocol):相當於java的介面
協議的方法不一定要實現,可以使用@required和@optional來設定,預設為@required(ob為弱文法,即使不實現必選方法編譯運行也不會報錯)
Class的反射
常用方法
Class 變數名 = [類或者對象 class];
Class 變數名 = [類或者對象 superclass];
Class 變數名 = NSClassFromString(方法名字的字串);
NSString *變數名 = NSStringFromClass(Class型別參數);
通過類名的字串形式執行個體化對象
Class class = NSClassFromString(@"Student");id obj = [[class alloc]init];NSLog(@"建立的對象為:%@",obj)
NSObject中提供的自省方法
-(BOOL)isKindOfClass:(Class)aClass 判斷對象是不是屬於指定類型或其子類
-(BOOL)isMemberOfClass:(Class)aClass 判斷對象是不是屬於指定類型
-(BOOL)isSubclassOfClass:(Class)aClass 判斷對象是不是屬於指定類型的子類
-(BOOL)conformsToProtocol:(Protocol *)aProtocol 判斷某個類/對象是否實現某個協議(參數使用@protocol(MyProtocol)傳入)
類別(Category):為現有的類添加新方法的方式
類別的類別聲明
@interface ClassName(CategoryName)
-(void)addMethod;
@end
類別實現
#import"ClassName+CategoryName.h"
@implementation ClassName(CategoryName)
-(void)addMethod {
//添加方法實現的代碼;
}
@end
類別的好處
想對架構提供的類進行擴充(沒有源碼)
不想產生一個新的子類的情況下,比如對NSArray的擴充
方便做專案管理,可以將一份源碼(未擴充的類)在多個地方共用,多人協作開發
對系統架構進行無縫擴充
< Objective-C >協議,反射和類別