国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

詳解 objective-c中interface與protocol的作用

2020-07-26 02:48:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

詳解 objective-c中interface與protocol的作用

以前對(duì)Objective-C中的interface,即頭文件的作用一直不太清楚。最近看了一些文章,再加上自己的試驗(yàn),對(duì)頭文件的作用稍有了解。

在我看來(lái),頭文件的作用是,定義對(duì)外的接口。

然而,它的作用也只有這個(gè)而已。頭文件無(wú)法保證對(duì)外接口一定會(huì)被實(shí)現(xiàn)。

根據(jù).h文件是否定義方法、.m文件是否實(shí)現(xiàn)方法,可以分為三類:

第一類是.h文件定義方法,.m文件也實(shí)現(xiàn)了方法,這是最common的做法,也是最沒有問(wèn)題的做法。

第二類是.h文件定義方法,但.m文件沒有實(shí)現(xiàn)該方法。此時(shí).m文件的@implementaion代碼會(huì)提示“imcomplete implementation”,意思是頭文件定義的方法和變量,沒有被完全實(shí)現(xiàn)。

比如:.h文件里這樣定義:

@interface Test : NSObject{}  -(void)hello;  @end 

但是在.m文件里沒有實(shí)現(xiàn)這個(gè)方法。在外部,我們可以調(diào)用這個(gè)方法,它在編譯時(shí)沒問(wèn)題,但在運(yùn)行時(shí)會(huì)出現(xiàn)“unrecognized selector sent to instance”錯(cuò)誤。

第三類是.h文件沒有定義,但.m文件里有這個(gè)方法。

比如,在.m文件里這樣實(shí)現(xiàn):

#import "Test.h"  @implementation Test  -(void)hello{   NSLog(@"hello world!"); }  @end 

這時(shí),hello()這個(gè)函數(shù)相當(dāng)于私有函數(shù),我們只可以在類中用[self hello]調(diào)用,而不能在外部調(diào)用。

因此我覺得,objective-c中的頭文件,只是為了編譯時(shí)更方便而已,它并不是真正的interface。

相對(duì)而言,protocol才算是真正意義上的interface,它的意義和Java中的接口差不多。

protocol的方法分兩種類型,一類是必須實(shí)現(xiàn)的,一類是不一定實(shí)現(xiàn)的。不一定實(shí)現(xiàn)的方法其實(shí)和.h文件里定義的差不多。而一定要實(shí)現(xiàn)的方法就是比較有用的了。

我們可以使用這樣的方法來(lái)初始化一個(gè)實(shí)現(xiàn)了名為Hello的protocol的類:

id<Hello> test = [[Test alloc] init]; 

protocol除了作為接口的作用之外,經(jīng)常還用來(lái)作為類之間進(jìn)行交互的方法,這時(shí)它叫作delegate。delegate的主要作用,是把一個(gè)類需要做的一部分事情,讓另一個(gè)類來(lái)完成。網(wǎng)上介紹delegate的文章鋪天蓋地,這里不再說(shuō)述。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高台县| 开江县| 施甸县| 华池县| 屯门区| 青阳县| 梅州市| 永定县| 阿坝县| 彭山县| 万源市| 分宜县| 灵宝市| 基隆市| 台北县| 共和县| 寿阳县| 丹巴县| 金寨县| 安泽县| 哈密市| 通许县| 天气| 仁怀市| 榆社县| 辽源市| 嘉鱼县| 新绛县| 当涂县| 安义县| 洛宁县| 普宁市| 巴中市| 巨野县| 永定县| 类乌齐县| 黄石市| 新民市| 雷州市| 福建省| 乐亭县|