< Objective-C >協議,反射和類別

來源:互聯網
上載者:User

標籤:

協議(@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 >協議,反射和類別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.