詳解 objective-c中interface與protocol的作用
詳解 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的做法,也是最沒(méi)有問(wèn)題的做法。
第二類是.h文件定義方法,但.m文件沒(méi)有實(shí)現(xiàn)該方法。此時(shí).m文件的@implementaion代碼會(huì)提示“imcomplete implementation”,意思是頭文件定義的方法和變量,沒(méi)有被完全實(shí)現(xiàn)。
比如:.h文件里這樣定義:
@interface Test : NSObject{}
-(void)hello;
@end
但是在.m文件里沒(méi)有實(shí)現(xiàn)這個(gè)方法。在外部,我們可以調(diào)用這個(gè)方法,它在編譯時(shí)沒(méi)問(wèn)題,但在運(yùn)行時(shí)會(huì)出現(xiàn)“unrecognized selector sent to instance”錯(cuò)誤。
第三類是.h文件沒(méi)有定義,但.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)用。
因此我覺(jué)得,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ì)本站的支持!
相關(guān)文章
iOS開(kāi)發(fā)避免安全隱患的要點(diǎn)總結(jié)
在本篇文章里小編給各位整理了關(guān)于iOS開(kāi)發(fā)如何避免安全隱患的知識(shí)點(diǎn)總結(jié),需要的朋友們學(xué)習(xí)下。2019-07-07
ios的手勢(shì)操作之UIGestureRecognizer淺析(推薦)
本篇文章主要介紹了ios的手勢(shì)操作之UIGestureRecognizer淺析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12
iOS中使用Fastlane實(shí)現(xiàn)自動(dòng)化打包和發(fā)布
Fastlane是一套使用Ruby寫(xiě)的自動(dòng)化工具集,用于iOS和Android的自動(dòng)化打包、發(fā)布等工作,可以節(jié)省大量的時(shí)間。下面給大家介紹ios fastlane 自動(dòng)化打包和發(fā)布的安裝方法,需要的朋友參考下吧2017-05-05
iOS自定義UIBarButtonItem的target和action示例代碼
這篇文章主要給大家介紹了關(guān)于iOS自定義UIBarButtonItem的target和action的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
iOS實(shí)現(xiàn)數(shù)字倍數(shù)動(dòng)畫(huà)效果
在iOS開(kāi)發(fā)中,制作動(dòng)畫(huà)效果是最讓開(kāi)發(fā)者享受的環(huán)節(jié)之一,下面這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)數(shù)字倍數(shù)動(dòng)畫(huà)效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
iOS開(kāi)發(fā)中使用UIDynamic來(lái)捕捉動(dòng)畫(huà)組件的重力行為
這篇文章主要介紹了iOS開(kāi)發(fā)中使用UIDynamic來(lái)捕捉動(dòng)畫(huà)組件的重力行為的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12
iOS 標(biāo)簽Tag列表的實(shí)現(xiàn)代碼
這篇文章主要介紹了本篇文章主要介紹了iOS 標(biāo)簽Tag列表的實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04

