oc知识点 类的扩展
生活随笔
收集整理的這篇文章主要介紹了
oc知识点 类的扩展
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
---恢復內容開始---
一Category
1Category 也叫分類,類目。是為沒有源代碼的類擴充功能
2擴充的功能會成為原有的類的一部分,可以通過原有類或者原有類的對象直接調用,并且可以繼承
3該方式只能擴充方法,不能擴充實例變量
Category的文件創建
在類目的.h文件中聲明需要添加的方法
@interface NSString (AddMethod) //聲明sayHi?方法 + (void)sayHi; @end在類目的.m文件中實現需要實現的方法
@implementation NSString (AddMethod) //實現sayHi?方法 + (void)sayHi { NSLog(@"我是牛逼的字符串"); } @end①在使用類目添加的方法首先要在對應的類中導入類目的.h文件
②sayHi方法是通過類目為NSString類添加的一個類方法,因此該方法的調用需要NSString類名調用
?
二Extension
1未能夠獲得源代碼的類添加私有的實例變量和方法
2注意:延展操作的類必須是能夠獲得源代碼的類
Teacher類中.m?文件中的代碼@interface Teacher(){ NSInteger _salary; //存儲對應的薪資} - (NSInteger)getSalary; //聲明?一個領?工資的?方法
@end @implementation Teacher //實現領?工資的操作 - (NSInteger)getSalary { NSLog(@"這個?月發了不少,可以吃?大餐了");
_salary = 1000; return _salary; } @end main.m中調?用getSalaryTeacher *teacher = [[Teacher alloc]init];
[teacher getSalary]; 通過延展定義的?方法屬于私有?方法,外界是沒有訪問權 限的,只能在當前類的.m?文件中訪問。
Category 和Extension的區別
三delegate設計模式
?1delegate的三要素 委托方,代理方,協議
2委托方:委托別人去執行某些操作的人(對象)
3協議;(Protocol):委托方需要代理方執行的操作
4代理方:被委托去執行某系操作的人(對象)
delegate模式寫使用案例
案例描述 結婚案例:有?一個?女孩結婚之前需要?自?己洗?衣服,做飯,掙 錢養活?己。但是有?一天?女孩不想再?自?己做飯,洗?衣服,掙 錢養活?己,因此她想要找?一個代理?人來幫她做,于是就想 到了結婚。 案例分析 對于做飯,洗?衣服,掙錢養活?自?己這些事情?女孩不 想?自?己做,想要通過結婚來找?一個男孩幫她做的過 程是?一個明顯的代理設計模式。其中?女孩在該過程 中是委托?人,跟她結婚的那個男孩是代理?人,下?面 我們來看?一下如何通過代理設計模式實現該過程。 步驟1:?女孩制定協議 在?女孩的.h?文件中聲明協議GirlDelegate @protocol GirlDelegate <NSObject> - (void)cooking; //做飯 - (void)makeMoney; //掙錢養活?自?己 @optional - (void)washing; //洗?衣服 @end 步驟2:?女孩定義delegate屬性 在?女孩的.h?文件中聲明協議GirlDelegate @interface Girl : NSObject//聲明 delegate屬性存儲代理?人對象。<>代表遵循協議 @property (nonatomic, assign)id<GirlDelegate>delegate;
@end 步驟3:男孩遵守協議并實現協議?方法 男孩遵守協議(男孩的.h?文件中)#import <Foundation/Foundation.h>#import "Girl.h"@interface Boy : NSObject<GirlDelegate> @end 步驟3:男孩遵守協議并實現協議?方法 男孩實現協議?方法(男孩的.m?文件中)@implementation Boy- (void)cooking { NSLog(@"給?老婆做飯"); } - (void)makeMoney { NSLog(@"掙錢養活?老婆"); } //洗?衣服的操作可以選擇實現 - (void)washing { NSLog(@"為?老婆洗?衣服"); } @end ? 步驟4:將男孩設置為?女孩的代理?人 在main.m?文件中完成的操作 //創建男孩對象 Boy *boy = [[Boy alloc] init]; //創建?女孩對象 Girl *girl = [[Girl alloc] init]; //將男孩設置為?女孩的代理?人對象 girl.delegate = boy; ? 步驟5:?女孩在合適的時機通知男孩做相應的操作 //模擬饑餓的操作 if ([girl.delegate respondsToSelector:@selector(cooking)]) { //通知男孩去做飯[girl.delegate cooking]; } 注:respondsToSelector:該?方法判斷對象是否能夠對某?一個選定的?方法 做出響應。
?
---恢復內容結束---
轉載于:https://www.cnblogs.com/yuboke/p/5234999.html
總結
以上是生活随笔為你收集整理的oc知识点 类的扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java字符串String相关2
- 下一篇: Tomcat/weblogic sess