青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CG@CPPBLOG

/*=========================================*/
隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
數據加載中……

用OBJC編程 5 - Working with Protocols

用OBJC編程 5 - Working with Protocols

協議定義了交互的消息
@protocol XYZPieChartViewDataSource
- (NSUInteger) numberOfSegments;
- (CGFloat)    sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
- (NSString *) titleForSegmentAtIndex:(NSUInteger)segmentIndex;
@end

數據源作為View的一個屬性,只要是符合協議的對象就可以,所以類型是id。
@interface XYZPieChartView : UIView
@property (weak) id <XYZPieChartViewDataSource> dataSource;
@end
委托和數據源屬性通常聲明為weak,以避免強引用循環。

設置屬性為一個不符合協議的對象,將會引起一個編譯時警告。

可選方法,使用@optional 和 @required
@protocol XYZPieChartViewDataSource
- (NSUInteger) numberOfSegments;
- (CGFloat)    sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
@optional
- (NSString *) titleForSegmentAtIndex:(NSUInteger)segmentIndex;
- (BOOL)       shouldExplodeSegmentAtIndex:(NSUInteger)segementIndex;
@required
- (UIColor *)  colorForSegmentAtIndex:(NSUInteger)segementIndex;
@end

運行時檢查可選方法
如果一個方法是可選的,那么在調用前應該檢查它是否實現。
NSString *thisSegmentTitle; // Local object variables are automatically initialized to nil
if([self.dataSource respondsToSelector:@selector(titleForSegmentAtIndex:)]){
    thisSegmentTitle = [self.dataSource titleForSegmentAtIndex:index];
}

respondsToSelector: 方法用了一個selector,@selector。
如上定義一個符合協議的id類型,調用respondsToSelector,會產生一個編譯時錯誤,解決方案是聲明對象符合NSObject協議

從協議繼承
最佳實踐是,你的協議依從NSObject協議。NSObject對象依從NSObject協議。
一旦你的協議依從NSObject協議,那么依從你協議的任何對象都必須實現NSObject協議的方法,但因為它們應該是NSObject的子類,你就不必自己實現這些NSObject的方法。依從NSObject協議非常有用。
@protocol MyProtocol <NSObject>

@end

comform 一個協議
@interface MyClass : NSObject <MyProtocol, AnotherProtocol>

@end
如果一個類聲明了大量的協議,意味著代碼需要重構成多個小的類。

一旦聲明依從某個協議,就必須實現所有的required方法,和需要的optional方法,否則編譯器會給出警告。方法的簽名必須相同。

Cocoa 和 Cocoa Touch 定義了大量的protocol
  • view的數據源協議
  • view的委托協議delegate
  • 一些類似的類,但是無繼承關系,比如NSArray和NSDictionary依從NSCoding協議
  • 一些OBJC語言級特性,也依賴協議,如一個容器需要依從NSFastEnumeration協議才能使用快速枚舉fast enumeration;copy的屬性依從NSCopying協議,否則會得到一個運行時異常。

為匿名使用協議

有時候,一個框架的開發者為了向使用者隱藏一個類,只把它的接口通過協議暴露

id <XYZFrameworkUtility> utility = [frameworkObject anonymousUtility];

例如NSFetcheResultsController
NSInteger sectionNumber = //,,,
id <NSFetchedResultSectionInfo> sectionInfo = 
          [self.fetchedResultsController.sections objectAtIndex:sectionNumber];
NSInteger numberOfRowsInSection = [sectionInfo numberOfObjects];





posted on 2013-11-21 09:32 cuigang 閱讀(367) 評論(0)  編輯 收藏 引用 所屬分類: OBJC

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区国产在线观看| 欧美影院一区| 欧美日韩亚洲国产一区| 一区二区三区精品视频在线观看| 欧美激情国产精品| 欧美成人免费观看| 日韩亚洲精品视频| 一区二区三区回区在观看免费视频| 欧美日韩精品系列| 欧美亚洲日本网站| 久久视频精品在线| 亚洲毛片在线观看| 亚洲免费影视| 精品91在线| 亚洲伦伦在线| 国产日本欧美一区二区| 麻豆精品视频在线| 欧美日韩一级片在线观看| 亚洲欧美不卡| 久久九九热免费视频| 亚洲精选视频免费看| 亚洲一区网站| 亚洲国产精品综合| 亚洲免费伊人电影在线观看av| 尤物精品国产第一福利三区| 亚洲激情第一区| 国产精品麻豆va在线播放| 裸体一区二区三区| 国产精品久久久久9999| 欧美高清视频免费观看| 国产精品海角社区在线观看| 欧美成年人视频网站| 国产精品久久久久高潮| 欧美黄色aa电影| 国产亚洲a∨片在线观看| 亚洲国产欧美久久| 韩国av一区二区三区在线观看| 亚洲欧洲日本一区二区三区| 国产一区二区丝袜高跟鞋图片| 日韩视频在线观看国产| 亚洲风情亚aⅴ在线发布| 亚洲一区二区三区高清不卡| 亚洲精品中文字幕在线观看| 欧美一区二区三区另类| 亚洲一区二区高清| 欧美激情视频网站| 欧美成人免费在线| 国产亚洲欧洲| 亚洲欧美在线一区| 亚洲中字黄色| 欧美天堂在线观看| 亚洲免费电影在线| 亚洲精品一区二区三| 久久久久九九九九| 久久久精彩视频| 国产精品一区二区黑丝| 一区二区日本视频| 亚洲一区二区不卡免费| 欧美精品色综合| 亚洲国产日韩欧美在线99| 影院欧美亚洲| 玖玖玖免费嫩草在线影院一区| 久久久久久久久久看片| 国产欧美短视频| 亚洲欧美视频在线观看视频| 亚洲亚洲精品在线观看| 欧美日韩国产欧| 一本大道久久a久久综合婷婷| 亚洲精品123区| 欧美成人国产一区二区| 亚洲高清免费| 日韩一区二区高清| 欧美日本乱大交xxxxx| 亚洲精品午夜精品| 亚洲欧美成人网| 国产美女在线精品免费观看| 午夜精品久久久久久99热软件| 性xx色xx综合久久久xx| 国产日韩在线一区二区三区| 午夜一级久久| 欧美aa国产视频| 日韩视频不卡中文| 国产精品国产三级欧美二区| 亚洲欧美日韩在线| 狂野欧美激情性xxxx| 91久久精品网| 国产精品hd| 久久精品一区二区三区不卡牛牛 | 精品av久久707| 久久最新视频| 日韩亚洲精品在线| 久久精品成人一区二区三区| 精品动漫av| 欧美日韩国产天堂| 亚洲欧美日韩一区在线观看| 免费在线国产精品| 一本久道久久综合中文字幕| 国产精品自拍三区| 看欧美日韩国产| 一区二区av| 欧美jjzz| 午夜精品福利一区二区蜜股av| 韩国精品久久久999| 欧美日韩一区二区三区视频| 亚洲欧美日韩天堂| 亚洲黄色片网站| 久久gogo国模裸体人体| 亚洲精品视频在线观看免费| 国产伦精品一区二区三区高清| 久久一区中文字幕| 亚洲欧美日韩中文播放| 欧美激情中文字幕乱码免费| 午夜精品久久久久久久久久久| 亚洲丶国产丶欧美一区二区三区| 欧美吻胸吃奶大尺度电影| 久久久久久网站| 亚洲自拍偷拍视频| 亚洲伦理在线免费看| 美女91精品| 午夜精品福利在线| 一区二区三区www| 在线激情影院一区| 国产一区91精品张津瑜| 欧美三级电影网| 欧美激情视频在线播放| 久久久久久伊人| 欧美一区二区大片| 亚洲影院高清在线| 99热在线精品观看| 亚洲欧洲日本国产| 欧美国产亚洲另类动漫| 老司机免费视频一区二区| 欧美在线观看你懂的| 亚洲在线播放电影| 亚洲一区欧美一区| 亚洲一区二区三区成人在线视频精品| 亚洲国产日韩欧美在线动漫| 国产综合香蕉五月婷在线| 国产欧美va欧美va香蕉在| 国产精品国产三级国产普通话三级| 欧美精品在线网站| 欧美区一区二| 欧美日韩高清在线观看| 欧美久久电影| 欧美日韩国产成人在线91| 欧美激情在线有限公司| 欧美激情bt| 欧美日韩综合久久| 国产精品久久久久久妇女6080| 国产精品高潮呻吟久久av无限| 欧美日韩一本到| 国产精品草草| 国产欧美日韩激情| 国产香蕉久久精品综合网| 国产性做久久久久久| 韩国三级电影久久久久久| 一区二区三区无毛| 亚洲精品黄网在线观看| 日韩午夜av| 亚欧美中日韩视频| 久久一综合视频| 亚洲国产天堂久久综合| 日韩午夜在线电影| 亚洲在线一区二区三区| 欧美在线观看视频一区二区三区| 久久久久久久波多野高潮日日| 久久婷婷国产综合精品青草 | 亚洲精品美女在线观看播放| 日韩视频免费| 午夜激情亚洲| 免费日韩成人| 欧美午夜不卡影院在线观看完整版免费| 欧美亚一区二区| 国产日韩一级二级三级| 亚洲国产天堂久久综合| 亚洲一区二区三区精品在线观看| 欧美伊人久久大香线蕉综合69| 嫩草国产精品入口| 亚洲精品久久久久中文字幕欢迎你 | 亚洲视频一区二区免费在线观看| 午夜在线精品| 亚洲成人在线视频网站| 亚洲国产你懂的| 亚洲午夜在线| 免费亚洲网站| 亚洲一区黄色| 欧美成人免费va影院高清| 国产毛片一区二区| 亚洲久久视频| 久久在线视频在线| 亚洲午夜视频在线观看| 久久久综合网站| 国产精品一香蕉国产线看观看| 亚洲福利视频网站| 久久精品人人| 亚洲视频自拍偷拍| 欧美精品激情blacked18| 尤物yw午夜国产精品视频| 欧美亚洲色图校园春色| 亚洲日韩成人|