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

厚積薄發,滴水穿石

搬家到主站了:http://www.cnblogs.com/cokecoffe/
隨筆 - 45, 文章 - 8, 評論 - 12, 引用 - 0
數據加載中……

Objective-C中委托和協議

from:http://mobile.51cto.com/iphone-283416.htm

Objective-C委托協議是本文要介紹的內容,委托協議是兩個概念,協議實際上相當于C++中的純虛類的概念,只定義并只能由其它類來實現。而委托類似于Java中的接口。(Objective-C實現委托這種機制是利用協議來實現的,這種說法我現在認為是不對的,理由下述:)。

Objective-C委托和協議本沒有任何關系,協議如前所述,就是起到C++中純虛類的作用,對于“委托”則和協議沒有關系,只是我們經常利用協議還實現委托的機制,其實不用協議也完全可以實現委托。下面說明了實現方式:

定義一個類A:

  1. @interface?A:NSObject ?
  2. -(void)print; ?
  3. @end ?
  4. @implement?A ?
  5. -(void)print{ ?
  6. } ?
  7. @end?

定義一個類B,在B中定義類A的實例為B中的成員變量:

  1. @interface?B:NSObject{ ?
  2. ???????A?*a_delegate; ?
  3. } ?
  4. @end?

下面在mai()函數中實現委托機制:

  1. void?main() ?
  2. { ?
  3. B?*b=[[B?alloc]init]; ?
  4. A?*a=[[A?alloc]init]; ?
  5. b.a_delegate=a; ?
  6. [b.a_delegate?print]; ?
  7. }?

這樣,最基本的委托機制就完成了,套用最通俗的一句解釋:B需要完成一個print的操作,但他自己并沒有實現這個操作,而是交給了A去完成,自己只是在需要時調用A中實現的print操作。

下面再寫一種實現方式,這樣方式更接近于我們通常見到的用協議還實現的方式:

我們還是定義一個類A:

  1. @interface?A:NSObject{ ?
  2. B?*b; ?
  3. } ?
  4. -(void)print; ?
  5. @end ?
  6. @implement?A ?
  7. @synasize?delegate; ?
  8. -(void)viewDidLoad{ ?
  9. b=[[B?alloc]init]; ?
  10. b.delegate=self; ?
  11. } ?
  12. -(void)print{ ?
  13. NSLog(@"print?was?called"); ?
  14. } ?
  15. @end?

然后類B的定義改成如下所示:

  1. @interface?B:NSObject{ ?
  2. id?delegate ?
  3. } ?
  4. @propert(nonamtic,retain)?id?delegate; ?
  5. @end ?
  6. ?
  7. 現在我們不用main()函數,在B的實現部分來實現委托機制: ?
  8. ?
  9. @implement?B ?
  10. -(void)callPrint{ ?
  11. [self.delegate?print]; ?
  12. } ?
  13. @end?

上面這種實現方式和第一種其實是一樣的,只是第一種是在第三方函數調用委托方法。delegate是id類型,本例中就是A類的一個實例,當然可以調用A類中的print。第二種方式不存在第三方函數,是在B類中調用 A類中的方法。或者說,B中需要print方法,自己不實現,讓A來實現,自己調用 。

再接下來就是最常見的用協議實現委托的方式,說明如下:

protocol-協議,就是使用了這個協議后就要按照這個協議來辦事,協議要求實現的方法就一定要實現。

delegate-委托,顧名思義就是委托別人辦事,就是當一件事情發生后,自己不處理,讓別人來處理。

當一個A view 里面包含了B view

b view需要修改a view界面,那么這個時候就需要用到委托了。

需要幾個步驟

1、首先定一個協議

2、a view實現協議中的方法

3、b view設置一個委托變量

4、把b view的委托變量設置成a view,意思就是 ,b view委托a view辦事情。

5、事件發生后,用委托變量調用a view中的協議方法

例子:

  1. B_View.h: ?
  2. @protocol?UIBViewDelegate?<NSObject>?
  3. @optional ?
  4. -?(void)ontouch:(UIScrollView?*)scrollView;?//聲明協議方法 ?
  5. @end ?
  6. @interface?BView?:?UIScrollView<UIScrollViewDelegate>?
  7. { ?
  8. id<?UIBViewDelegate?>?_touchdelegate;?//設置委托變量 ?
  9. } ?
  10. @property(nonatomic,assign)?id<?UIBViewDelegate?>?_touchdelegate;? ?
  11. @end ?
  12. B_View.mm: ?
  13. @synthesize?_touchdelegate; ?
  14. -?(id)initWithFrame:(CGRect)frame?{ ?
  15. if?(self?=?[super?initWithFrame:frame])?{ ?
  16. //?Initialization?code ?
  17. _touchdelegate=nil; ?
  18. } ?
  19. return?self; ?
  20. } ?
  21. -?(void)?touchesBegan:(NSSet*)touches?withEvent:(UIEvent*)event ?
  22. { ?
  23. [super?touchesBegan:touches?withEvent:event]; ?
  24. if(_touchdelegate!=nil?&&?[_touchdelegate?respondsToSelector:?@selector(ontouch:)?]?==?true)? ?
  25. [_touchdelegate?ontouch:self];?//調用協議委托 ?
  26. } ?
  27. ?
  28. @end ?
  29. A_View.h: ?
  30. @interface?AViewController?:?UIViewController?<?UIBViewDelegate?>?
  31. { ?
  32. BView?*m_BView; ?
  33. } ?
  34. @end ?
  35. A_View.mm: ?
  36. -?(void)viewWillAppear:(BOOL)animated ?
  37. { ?
  38. m_BView._touchdelegate?=?self;?//設置委托 ?
  39. [self.view?addSubview:?m_BView]; ?
  40. } ?
  41. -?(void)ontouch:(UIScrollView?*)scrollView ?
  42. { ?
  43. ???//實現協議 ?
  44. }?

posted on 2012-04-25 23:18 Wangkeke 閱讀(2851) 評論(0)  編輯 收藏 引用 所屬分類: IOS

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久高清免费观看| 亚洲尤物精选| 美女图片一区二区| 午夜久久tv| 欧美精品国产一区二区| 一区二区欧美国产| 欧美日韩精品综合| 亚洲国产成人不卡| 国产欧美日韩在线播放| 亚洲欧美日韩精品一区二区| 欧美一区二区免费视频| 国产精品乱人伦一区二区 | 久久综合给合| 欧美成人午夜影院| 亚洲精品中文字幕有码专区| 欧美在线观看网站| 久久久爽爽爽美女图片| 国产亚洲精品成人av久久ww| 久久久www| 一本大道久久a久久综合婷婷 | 久久精品国产99精品国产亚洲性色 | 一区二区精品在线| 国产噜噜噜噜噜久久久久久久久| 夜夜嗨av一区二区三区四季av| 亚洲一区二区三区视频播放| 黄色另类av| 国产精品久久久久久亚洲毛片| 亚洲调教视频在线观看| 亚洲福利精品| 欧美在线观看天堂一区二区三区| 国产欧美一区视频| 欧美日本韩国一区| 久久国产福利国产秒拍| 亚洲免费av网站| 欧美成人激情视频免费观看| 亚洲欧美日本另类| 一本色道精品久久一区二区三区| 国产精品一级二级三级| 欧美日韩一区免费| 欧美激情成人在线视频| 理论片一区二区在线| 午夜在线a亚洲v天堂网2018| 91久久久久久| 最近中文字幕日韩精品| 欧美第一黄色网| 欧美大片一区二区三区| 乱人伦精品视频在线观看| 久久成人免费电影| 久久riav二区三区| 久久一区激情| 亚洲国产精品一区制服丝袜| 欧美国产丝袜视频| 国内成人精品视频| 国产婷婷色综合av蜜臀av | 久久久久久国产精品mv| 久久综合福利| 欧美日韩另类丝袜其他| 欧美色播在线播放| 国产欧美精品va在线观看| 国产精品尤物福利片在线观看| 国产亚洲精品久久飘花| 1769国产精品| 午夜精品久久久99热福利| 免费观看一区| 午夜激情综合网| 欧美日韩国产欧| 国产精品一区二区久久| 亚洲国产精品va在线看黑人| 99在线精品视频| 久久亚洲电影| 亚洲一区国产视频| 欧美国产激情二区三区| 国内久久婷婷综合| 亚洲一区免费在线观看| 欧美高潮视频| 久久婷婷综合激情| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲网站在线播放| 亚洲国产99精品国自产| 免费久久99精品国产自| 国产精品一区在线观看你懂的| 日韩亚洲一区二区| 欧美电影免费观看高清完整版| 午夜精品久久久久久久99樱桃| 久久夜色精品国产欧美乱| 亚洲一二三区在线| 欧美日本亚洲视频| 一本色道婷婷久久欧美| 亚洲精品一区二区在线| 欧美电影免费观看高清| 亚洲精品综合在线| 亚洲美女区一区| 国产精品久久久久婷婷| 欧美影院午夜播放| 可以看av的网站久久看| 午夜精品福利一区二区蜜股av| 国产精品永久免费在线| 久久精品一区二区国产| 免费一区二区三区| 亚洲永久精品国产| 久久国产精品99国产| 亚洲精品一线二线三线无人区| 日韩网站在线观看| 国产人成一区二区三区影院| 久久全球大尺度高清视频| 欧美99久久| 久久成人久久爱| 欧美金8天国| 久久久蜜桃一区二区人| 欧美三级视频在线播放| 久久天天躁夜夜躁狠狠躁2022| 欧美另类变人与禽xxxxx| 欧美一级网站| 国产精品草莓在线免费观看| 欧美国产综合| 亚洲高清在线观看一区| 香蕉av福利精品导航| 羞羞视频在线观看欧美| 欧美精品成人一区二区在线观看| 欧美中文字幕在线观看| 在线中文字幕一区| 亚洲免费成人av| 久久在线观看视频| 免费成人网www| 在线观看成人av| 男女精品网站| 日韩视频不卡中文| 一区二区三区欧美成人| 欧美三区在线观看| 亚洲一区中文字幕在线观看| 亚洲天天影视| 国产欧美精品va在线观看| 午夜精品在线| 欧美成人午夜激情| 亚洲美女视频在线观看| 欧美激情2020午夜免费观看| 一本大道av伊人久久综合| 亚洲欧美在线x视频| 国际精品欧美精品| 欧美国产一区视频在线观看| 亚洲日本乱码在线观看| 亚洲欧美激情一区| 在线观看视频日韩| 国产精品成人观看视频国产奇米| 亚洲永久精品大片| 亚洲精品国产系列| 久久久久久久综合日本| 亚洲免费av网站| 精品1区2区3区4区| 国产精品草莓在线免费观看| 久久精品国产91精品亚洲| 中文亚洲视频在线| 最新国产成人在线观看| 久久久久se| 久久国产精品一区二区| 亚洲性线免费观看视频成熟| 亚洲国产精品视频| 影音先锋亚洲一区| 亚洲第一页自拍| 亚洲网站在线| 亚洲人成网站精品片在线观看| 久久激五月天综合精品| 亚洲欧美日韩成人高清在线一区| 91久久精品一区二区三区| 在线日韩日本国产亚洲| 狠狠色综合网| 1024亚洲| 中文欧美字幕免费| 亚洲欧美国产精品va在线观看| 一本色道久久加勒比精品| 一区二区三区|亚洲午夜| 亚洲制服av| 久久综合狠狠综合久久综青草| 久久午夜精品| 91久久国产综合久久91精品网站| 亚洲黄色视屏| 亚洲欧美在线aaa| 久久青草欧美一区二区三区| 欧美日韩国产在线| 国产日韩欧美三级| 亚洲欧洲精品一区二区三区不卡 | 久久精品国产99国产精品| 欧美精品系列| 国产一级揄自揄精品视频| 亚洲激情视频在线观看| 欧美亚洲视频一区二区| 亚洲黄页一区| 久久久精品久久久久| 欧美午夜激情小视频| 精品1区2区3区4区| 欧美一级免费视频| 99精品欧美一区二区三区综合在线 | 久久成人一区二区| 亚洲国产精品一区二区尤物区| 中文国产一区| 亚洲欧洲日本一区二区三区| 久久久久国产精品www| 国产精品麻豆欧美日韩ww| 亚洲尤物精选| 亚洲影院在线观看|