object-c語言的動態性,不但體現在繼承和重寫上,還有乙個非常強大的功能就是分類和擴充套件,比如乙個類的方法不能滿足我現在的要求,而且我還不想修改原類的結構,這是分類就有很大的作用,有時我們想修改原來也不可能,不如系統提供的類,像nsstring,uiviewcontroller等,我們要是想給他們新的功能方法,只能用擴充套件。
category:
@inte***ce
uiviewcontroller (qxviewcontroller) //
分類中只能宣告方法
需要使用這個多加的方法只要在使用的地方匯入
#import "uiviewcontroller+qxviewcontroller.h"
就可以了 //
如果只匯入
uiviewcontroller.h
是不行的,是不會看到分類中新加的方法的,因為分類,跟原類
沒有寫在同乙個
object-c file裡
//nsstring
就可以,因為系統把它所有的分類都寫在了
nsstring
這個file裡了
-(nsinteger
)getstartime;
@end
建立分類的步驟:
分類中可以訪問原來類中的成員變數,但是只能訪問@protect和@public形式的變數。如果想要訪問本類中的私有變數,分類和子類一樣,只能通過方法來訪問。
如果一定要在分類中新增成員變數,可以通過getter,setter手段進行新增
擴充套件extension是分類的特例,就是匿名的分類:
@inte***ce
neibucategory()
//擴充套件其實就是分類的乙個特例,就是沒有名字,匿名的分類就是擴充套件,由於是在
.m檔案中宣告的分類,所以是優化的,外面是看不到
remove:
這個方法的 -(
void
)remove:(
id)value;
@end
@implementation
neibucategory -(
instancetype
)init
else
} -(void
)add:(
id)value -(
void
)remove:(
id)value
@end
如果要想擴充套件可以在別的檔案中使用就要在.h檔案中宣告:
#import
#import
@inte***ce
uiviewcontroller
()//匿名分類就是擴充套件了uiviewcontroller,而且是在neibucategory.h中宣告的,所以外部的檔案都可以使用testcategory方法
//只要匯入neibucategory.h就行 -(
void
)testcategory;
@end
@implementation
uiviewcontroller -(
void
)testcategory
@end
@inte***ce
neibucategory :
nsobject
@property
(nonatomic
,strong
)uiviewcontroller
*viewcontrller; -(
void
)add:(
id) value;
@end
使用neibucategory.h內部宣告擴充套件的uiviewcontroller:
#import
"testcategoryviewcontroller.h"
#import
"uiviewcontroller+qxviewcontroller.h"
#import
"neibucategory.h"
@inte***ce
testcategoryviewcontroller()
@end
@implementation
testcategoryviewcontroller
- (void
)viewdidload
iOS 類擴充套件與分類的區別
類擴充套件 class extension也有人稱為匿名分類 能為某個類附加額外的屬性,成員變數,方法宣告 一般的類擴充套件寫到.m檔案中 一般的私有屬性寫到類擴充套件 inte ce mitchell 屬性 方法 end分類的小括號中必須有名字 inte ce 類名 分類名字 方法宣告 end i...
iOS 類擴充套件與分類的區別
引用自此處 類擴充套件 class extension也有人稱為匿名分類 作用 能為某個類附加額外的屬性,成員變數,方法宣告 一般的類擴充套件寫到.m檔案中 一般的私有屬性寫到類擴充套件 使用格式 inte ce mitchell 屬性 方法 end與分類的區別 分類的小括號中必須有名字 inte ...
分類,擴充套件和繼承的區別
1 分類和擴充套件的區別 1 分類 宣告的時候使用格式中括號必須要有分類名稱,建立完成後有兩個資料夾 person action.h person action.m檔案 inte ce 類名 分類名稱 方法宣告 end implementation 類名 分類名稱 方法實現 end 擴充套件 宣告的...