多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > oc中分類 擴展 協議的使用及區別

oc中分類 擴展 協議的使用及區別

來源:程序員人生   發布時間:2015-03-18 09:51:49 閱讀次數:6570次
1、分類
     1、適用范圍
     當你已封裝好了1個類(也多是系統類、第3方庫),不想在改動這個類了,可是隨著程序功能的增加需要在類中增加1個方法,這時候我們沒必要修改主類,只需要給你原來的類增加1個分類。
     將1個大型的類拆分成不同的分類,在不同分類中實現種別聲明的方法,這樣可以將1個類的實現寫到多個.m文件中,方便管理和協同開發。
     分類中的方法可以只聲明,不實現,所以在協議不支持可選方法的時候(協議現在已支持可選方法),通常把分類作為非正式協議使用。
     2、語法格式
    文件中的語法
     @interface 主類類名(分類類名)
     @end
     @implementation 主類類名(分類類名)
     @end
     文件名通常為:主類名+分類名
     調用方法時,只需要向主類援用放送消息便可
    3、注意事項
  • 分類中方法的優先級比原來類中的方法高
     也就是說,在分類中重寫了原來類中的方法,那末分類中的方法會覆蓋原來類中的方法
  • 分類中只能聲明方法,不能添加屬性變量,在運行時分類中的方法與主類中的方法沒有區分
  • 通常來說,分類定義在.h文件中,但也能夠定義.m文件中,此時分類的方法就變成私有方法  
     4、如何使用
定義XYZPopViewController類的分類
XYZPopViewController+CatController.h文件
@interfaceXYZPopViewController (CatController)
- (void)test;
@end

XYZPopViewController+CatController.m文件
@implementationXYZPopViewController (CatController)
- (void)test {
    NSLog(@"測試1下XYZPopViewController的分類");
}
@end

2、擴大
    1、適用范圍
     擴大是分類的1種特殊情勢。
     2、語法格式
     @interface 主類類名()
     @end
     擴大通常定義在主類.m文件中,擴大中聲明的方法直接在主類的.m文件中實現。
    3、注意事項
  • 擴大中可以聲明實例變量,可以聲明屬性
  • 由于擴大通常定義在主類的.m文件中,所以擴大聲明的方法和屬性通常是私有的
     4、分類和擴大的區分
     分類是不可以聲明實例變量,通常是公然的,文件名是:主類名+分類名.h
     擴大是可以聲明實例變量,是私有的,文件名為:主類名_擴大標識.h,在主類的.m文件中#import該頭文件
     5、如何使用
定義 XYZPopViewController類的擴大
方式1、以單獨的文件定義
XYZPopViewController_ExViewController.h文件
#import"XYZPopViewController.h"

@interfaceXYZPopViewController()
@property(nonatomic,strong)NSString*stringOfEx;
- (void)testEx;
@end

方式2、在主類的.m文件中定義
XYZPopViewController.m文件
#import"XYZPopViewController.h"

@interfaceXYZPopViewController()
@property(nonatomic,strong)NSString*stringOfEx;
- (void)testEx;
@end

@implementationXYZPopViewController
@end

在主類的.m文件中實現擴大定的方法
#import"XYZPopViewController.h"
//import"XYZPopViewController_ExViewController.h"

@interfaceXYZPopViewController()

@end

@implementationXYZPopViewController
- (void)testEx {
   
self.stringOfEx= @"給擴大里面定義的屬性字符串賦值";
   
NSLog(@"定義的屬性String:%@",self.stringOfEx);
}
@end


3、協議
     1、適用范圍
     協議用來制定1個規則,1個對象遵照某個協議,就相當于必須遵照它的規則(實現必須實現的方法),也就具有了1種能力。通常適用協議來實現拜托代理模式的傳值和消息發送。
     2、語法格式
    聲明協議
     @protocol 協議名 <>
           @required 聲明必須遵照的屬性和方法,默許!
           @optional 聲明可選的屬性和方法
     @end
     1個類遵照1個協議
     @interface 類名(分類名):父類名 <協議名>
     @end
     3、注意事項
  •  協議的繼承相當于協議的合并
  •  1個類可以同時遵照多個協議,協議之間用","號分開
  • 如果1個類遵照1個協議,那末它的子類也遵照
  • 協議的使用和多態相類似,可以用作數組、參數、返回值類型,只不過量態返回的對象,1定要有繼承關系,協議類型返回的對象,1定要有遵照協議或實現協議。
     4、如何使用
          在1個對象A中定義1個協議類型的援用,讓這個援用指向實現了協議或遵照了協議的對象B,A對象可以在適合的時候通過這個援用向遵照了協議的對象B發送消息(只能發送協議要求的消息)。由于對象B遵照協議,在B中實現了協議要求的方法,所以當A通過這個協議類型的援用發送消息時,B就會履行這個方法實現的相干操作。

定義1個協議
#import<Foundation/Foundation.h>

@protocolXYZProtocolDelegate <NSObject>
-(void)changedColor:(UIColor *)color;
@end

在對象A中定義1個協議類型的援用
@interfaceXYZPopViewController : UIViewController
@property(nonatomic,weak)id<XYZProtocolDelegate> delegate;
@end
A對象可以在適合的時候通過這個援用向遵照了協議的對象B發送消息(點擊button發送1個消息)
- (void)buttonClick:(UIButton*)button {
     [self.delegatechangedColor:[UIColoryellowColor]];
}
對象B遵照協議
@interfaceXYZDetailViewController()<XYZProtocolDelegate>

@end
對象B中實現協議要求的方法
- (void)changedColor:(UIColor*)color {
   
self.textView.textColor= color;
}
在對象B中得到對象A的援用,把A中定義的那個協議類型的援用指向本身(1般是在B中創建或初始化A時)
XYZPopViewController*pVC = [[XYZPopViewControlleralloc]init];
pVC.delegate =self

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: a天堂v| 亚洲色图欧美在线 | 天堂tv亚洲tv日本tv不卡 | 亚洲婷婷综合中文字幕第一页 | 国产欧美一区二区三区小说 | 在线不卡亚洲 | 国产高清在线免费观看 | 免费一级毛片在播放视频 | 来吧成人综合网 | 精品一区二区三区四区 | 台湾成人性视频免费播放 | 成年人免费在线视频观看 | 欧美一级淫片aaaaaaa视频 | 最好看的最新中文字幕2018免费视频 | 秋霞麻豆 | 色噜噜狠狠先锋影音久久 | xxx暴力xxx | 在线观看免费黄色网址 | 久久亚洲国产 | 免费观看一级欧美大 | 毛片免费永久不卡视频观看 | 欧美69xxxhd| 欧美久久伊人 | 久久99中文字幕伊人 | 91精品久久久久久久久久小网站 | 武则天一级淫片免费放 | 欧美最猛性xxxxx免费 | 欧美亚洲综合另类在线观看 | 国产免费a v吧在线观看不卡 | 伊人免费观看 | 2018年成人精品 | 中国做爰国产精品视频 | 日韩中文字幕一区 | 69热在线| 亚洲成人一区 | 国产不卡的一区二区三区四区 | 欧美一级视频免费观看 | 欧美性猛交xxxx免费看 | 456亚洲人成影院在线观 | 亚洲免费视频网站 | 伊人影院99 |