OC中的類目和延展以及非正式協議

2021-07-09 02:37:59 字數 3240 閱讀 8393

//  viewcontroller.m

// oc-09_01

//// created by ibokan on 15/12/21.

//#import "viewcontroller.h"

#import "tool.h"

#import "tool+tool_category.h"

#import "myclass.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

if ([myclass respondstoselector:@selector(test2)])

#pragma mark~~~~~~~~~~~~~延展~~~~~~~~~~~~~~~~

[myclass setvalue:@"我是延展的屬性2" forkey:@"property3"];

if ([myclass respondstoselector:@selector(test2)])

}- (void)didreceivememorywarning

@end

//

// tool.h

// oc-09_01

//// created by ibokan on 15/12/21.

//#import @inte***ce tool : nsobject

//原類的屬性

@property (nonatomic,strong)nsstring *property;

//原類的方法

-(void)function1;

@end

#pragma mark~~~~~~~~~~~類目~~~~~~~~~~~

//在類目中為原類新增新的屬性和方法

/* 類目就是為已存在的類新增新的方法,但是不能新增例項變數

類目的使用環境

1.類包含了很多個方法實現,而這些方法需要不同團隊的成員變數來實現。

2.當你在使用基礎類庫中的類時,你不想繼承這些類而指向新增一些方法時。

類目能實現上面需求,當然也有使用類目時需要注意的問題

1.類目可以訪問原始類的例項變數,但不能新增例項變數,如果想新增例項變數,那就通過繼承建立子類來實現。

2.類目可以過載原始類的方法,但是不推薦這麼做,這樣會覆蓋掉原始類的方法,如果確實要過載,那就通過繼承建立子類來實現。

3.和普通介面有所區別的是,在類目的實現檔案中的例項方法只要你不去呼叫它你可以不用實現宣告的所有方法。

*/@inte***ce tool (toolcategory)

@property (nonatomic,strong)nsstring *property2;

//-(void)function2;

//通過類目過載原始類的方法

-(void)function1;

@end

//

// tool.m

// oc-09_01

//// created by ibokan on 15/12/21.

//#import "tool.h"

#import @implementation tool

-(void)function1

@end

@implementation tool (toolcategory)

/* 在一般情況下,我們是不能向category新增屬性的,只能新增方法,但有些情況下,我們確實需要向類目中新增屬性,而且系統的api也有一些在category新增屬性的情況,那麼著到底是怎麼實現的呢?

ios執行時機制

ios執行時機制,簡單來說,就是蘋果為開發者提供的一套在執行時動態建立類,屬性,方法的api,它是一套純c語言的api,使用響應的api就可以通過category給乙個原本存在的類新增屬性

*/#pragma mark~~~~~~~~~~~~~~~合成類目中的屬性

-(void)setproperty2:(nsstring *)property2

-(nsstring *)property2

-(void)function2

-(void)function1

@end

//

// myclass.m

// oc-09_01

//// created by ibokan on 15/12/21.

//#import "myclass.h"

#import #import "myclass_myclass_extension.h"

@inte***ce myclass ()

@property (nonatomic,retain)nsstring *property3;

-(void)textextension;

@end

@implementation myclass

#pragma mark~~~~~~~~~~~~~~~~延展~~~~~~~~~~~~~~~~~~

/* 延展

延展的作用就是定義自己的私有方法

形式和類目相同,不必新建立檔案,只是把類目的inte***ce檔案放在你需要擴充套件的類的.m檔案裡

*/-(void)test1

-(void)test2

//延展

-(void)textextension

//oc執行時設定延展中的屬性

-(void)setproperty3:(nsstring *)property3

-(nsstring *)property3

-(void)myclas***tenson2

@end

//

// nsobject+nsobjext_category.h

// oc-09_01

//// created by ibokan on 15/12/21.

//#import //給nsobject新增乙個類目,既非正式協議

@inte***ce nsobject (nsobjext_category)

-(void)test1;

-(void)test2;

@end

Objective C中的類目和延展

類目 類別 category為已知的類增加新的方法 延展 extension 通知在本類的定義裡使用類目來宣告私有方法 1.類目方法的應用 對現有類進行擴充套件 比如 可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。作為子類的替代手段 ...

Objective C中的類目和延展

類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 b 一 類目 b 1.類目方法的應用 list 對現有類進行擴充套件 比如 可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。作為子類的替代手段 不需要定義和使...

Objective C中的類目和延展

類目 為已知的類增加新的方法 延展 通知在本類的定義裡使用類目來宣告私有方法 b 一 類目 b 1.類目方法的應用 list 對現有類進行擴充套件 比如 可以擴充套件cocoa touch框架中的類,在類目中增加的方法會被子類繼承,而且在執行時跟其他的方法沒有區別。作為子類的替代手段 不需要定義和使...