iOS中@protocal中定義@property的問(wèn)題。

在Objective-C中使用@protocol定義一組方法規(guī)范衡奥,實(shí)現(xiàn)此協(xié)議的類(lèi)必須實(shí)現(xiàn)對(duì)應(yīng)的方法(@optional的方法不用必須實(shí)現(xiàn))。熟悉面向?qū)ο蟮耐贾澜涌诒旧硎菍?duì)象行為描述的協(xié)議規(guī)范远荠。也就是說(shuō)在Objective-C中@protocol和其他語(yǔ)言的接口定義是類(lèi)似的矮固,只是在Objective-C中interface關(guān)鍵字已經(jīng)用于定義類(lèi)了,因此它不會(huì)再像C#矮台、Java中使用interface定義接口了乏屯。一般我們@protocol定義方法,有時(shí)候也會(huì)看到只有property(屬性)的情況瘦赫,在core animation中辰晕,CALayer遵循了這個(gè)CAMediaTiming這個(gè)協(xié)議,如圖所示:

可以看到這個(gè)CAMediaTiming聲明的全部是property确虱,但其實(shí)這個(gè)協(xié)議本質(zhì)上還是定義了方法接口而已含友,property的本質(zhì)只是定義一組get和set方法。但是在使用時(shí)可能還是有點(diǎn)小問(wèn)題需要注意校辩。直接看demo:

@protocol MyProtocal <NSObject>

@property (nonatomic, copy) NSString *name;

@end
#import <Foundation/Foundation.h>
#import "MyProtocal.h"

@interface TWPersion : NSObject<MyProtocal>

@end
#import "TWPersion.h"

@implementation TWPersion

- (NSString*)description{
    return [NSString stringWithFormat:@"%@",self.name];
}

@end
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    TWPersion *p = [[TWPersion alloc] init];
    p.name = @"wang";
    NSLog(@"%@",p.description);
}

定義了一個(gè)MyProtocal的協(xié)議窘问,然后定義一個(gè)TWPersion類(lèi),遵循MyProtocal宜咒,在.m文件里只是重寫(xiě)了description方法惠赫,并未做其他事,然后在viewDidLoad里故黑,生成一個(gè)TWPersion對(duì)象儿咱,并調(diào)用其description方法,在description里會(huì)調(diào)用self.name场晶,即在MyProtocal聲明的屬性混埠。代碼很簡(jiǎn)單,然后我們運(yùn)行demo诗轻,可以看到app crash了钳宪,錯(cuò)誤信息如下:


Paste_Image.png

錯(cuò)誤信息很明確,我們的TWPersion沒(méi)有實(shí)現(xiàn)setName方法,的確如此吏颖,我們?cè)?m文件里確實(shí)沒(méi)有重寫(xiě)setName方法搔体。所以在peotocal里使用property時(shí),與在class里直接定義property時(shí)還是不太一樣侦高,最簡(jiǎn)單的方法即自己手動(dòng)加入如下代碼

@synthesize name = _name;

加入代碼后的.m文件里代碼如下:

#import "TWPersion.h"

@implementation TWPersion
@synthesize name = _name;

- (NSString*)description{
   return [NSString stringWithFormat:@"%@",self.name];
}

@end

總結(jié)

本質(zhì)上如果在protocal里定義了屬性嫉柴,就要在實(shí)現(xiàn)類(lèi)里面自己實(shí)現(xiàn)get和set方法厌杜,最快速的方法就是讓編譯起幫我們生成get和set代碼奉呛,如果需要自己重寫(xiě),那也是可以的夯尽。很多時(shí)候瞧壮,如果不需要自定義的get和set方法,在protocal里定義property時(shí)匙握,只要@synthesize x=_x; 即可咆槽,其它用法跟在class里定義的屬性一模一樣。
Demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圈纺,一起剝皮案震驚了整個(gè)濱河市秦忿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛾娶,老刑警劉巖灯谣,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛔琅,居然都是意外死亡胎许,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)罗售,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辜窑,“玉大人,你說(shuō)我怎么就攤上這事寨躁∧滤椋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵职恳,是天一觀(guān)的道長(zhǎng)所禀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)话肖,這世上最難降的妖魔是什么北秽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮最筒,結(jié)果婚禮上贺氓,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好辙培,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蔑水。 她就那樣靜靜地躺著,像睡著了一般扬蕊。 火紅的嫁衣襯著肌膚如雪搀别。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天尾抑,我揣著相機(jī)與錄音歇父,去河邊找鬼。 笑死再愈,一個(gè)胖子當(dāng)著我的面吹牛榜苫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翎冲,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼垂睬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抗悍?” 一聲冷哼從身側(cè)響起驹饺,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缴渊,沒(méi)想到半個(gè)月后赏壹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疟暖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年卡儒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俐巴。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骨望,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欣舵,到底是詐尸還是另有隱情擎鸠,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布缘圈,位于F島的核電站劣光,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糟把。R本人自食惡果不足惜绢涡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遣疯。 院中可真熱鬧雄可,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至虐急,卻和暖如春箱残,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背止吁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工被辑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赏殃。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓敷待,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仁热。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理勾哩,服務(wù)發(fā)現(xiàn)抗蠢,斷路器,智...
    卡卡羅2017閱讀 134,661評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法思劳,類(lèi)相關(guān)的語(yǔ)法迅矛,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法潜叛,異常的語(yǔ)法秽褒,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • 如今的你我 不知人生苦楚 忍不住歡喜 與沒(méi)完沒(méi)了的孤獨(dú) 所以肯守著彼此 就像冬夜的篝火 和燃燒的干木 就像無(wú)憂(yōu)的路...
    猩野水味閱讀 904評(píng)論 1 8
  • 自打加入了小灶群销斟,就被許許多多的人提起的《書(shū)都不會(huì)讀,你還想成功》這本書(shū)所吸引椒舵,貓叔說(shuō)這本書(shū)是改變他命運(yùn)的一本書(shū)蚂踊,...
    翎馨閱讀 165評(píng)論 0 0