Objective C語言 Category類目

2021-07-09 06:41:09 字數 3338 閱讀 7538

在工程項下個找到viewcontroller.m檔案

tool.h

#import @inte***ce tool : nsobject

//原類的屬性

@property (nonatomic,strong) nsstring *property1;

-(void)function1;

#pragma mark------------類目-----------

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

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

類目的使用場景

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

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

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

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

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

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

*/@end

@inte***ce tool (toolcategory); //類目

//@property (nonatomic,strong)nsstring *property2;

@property (nonatomic,strong)nsstring *property3;

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

ios 執行時機制

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

*/-(void)function2;

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

-(void)function1;

@end

tool.m

#import "tool.h"

#import @implementation tool

-(void)function1

@end

@implementation tool (toolcategory)

-(void)function2

#pragma mark ---------合成類目中的屬性---------------------

-(void)setproperty2:(nsstring *)property2

-(nsstring *)property2

-(void)function1

@end

在xcode 按快捷鍵com+n 在左面找到ios子類目下找到source在右面找到objective-c file

next -> file type -> category

在到file -> 打入檔案名字:tool_category

tool+too_category.h

#import "tool.h"

@inte***ce tool (too_category)

-(void)function3;

@end

tool+too_category.m

#import "tool+too_category.h"

@implementation tool (too_category)

-(void)function3

@end

viewcontroller.m

#import "viewcontroller.h"

#import "tool.h"

#import "tool+too_category.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

- (void)didreceivememorywarning

@end

執行結果

2016-01-02 14:14:55.253 oc_lx_09_01[2991:85890]

通過類目過載的

fuanction1

2016-01-02 14:14:55.254 oc_lx_09_01[2991:85890] rick

2016-01-02 14:14:55.254 oc_lx_09_01[2991:85890] i'm function2

2016-01-02 14:14:55.254 oc_lx_09_01[2991:85890] property = property2

2016-01-02 14:14:55.254 oc_lx_09_01[2991:85890] i'm fuanction3

Objective C語言特性

1.objective c建立在c語言之上,他是在c語言基礎上新增擴充套件而來能夠建立和操作物件的一門心的設計語言。2.objective c是ansi c的超集,可以混編c和c 3.可以在現存c編譯器基礎上實現,不需要編寫全新的編譯器。在mac系統上編寫objective c一般都使用xcode編...

OBJECTIVE C語言基礎

1.oc語言的特點 objective c,通常寫作objc,oc和較少用的 objective c或obj c,是擴充c的物件導向程式設計語言。objective c是靜態的,強型別定義的語言。只允許單根繼承 cocoa中的根是nsobject 2.常量 程式執行過程中,值不能被改變的量稱為常量。...

Objective c語言 物件

main.m main.m oc 8 created by ibokan on 15 12 7.oc 語言的特點在p4 import import student.h 相當於乙個宣告檔案 inte ce teacher nsobject void classbegin end 相當於實現檔案 imp...