//再設計一個類的時候,有些方法需要對外公開(接口),有些僅供內部使用.
類的擴展:為類添加新的特征(屬性)或者方法
對已知類:
1.直接添加
2.繼承(在其子類中添加實例變量和方法)
3.使用extension(對私有方法和私有屬性的擴展(未在.h中申明的方法就是私有方法))
// extension
// 一般我們把類的延展直接寫在類的.m文件中
// extension 對私有方法和私有屬性的擴展(未在.h中申聲的方法)
// 對已知類擴充私有方法,選擇 Objective - C file
// 使用時要把頭文件引入,類的延展裡可以添加類的實例變量
對未知類:
category 分類,類名,為沒有源代碼的類添加方法,不能添加實例變量
總結:extension 和 category
1.extension為已知類添加私有屬性和私有方法.category為沒有源代碼(未知類)的類添加方法.
2.extension可以添加實例變量(屬性),category不能添加實例變量.
3.extension文件可有.h文件, category同時生成一對.h和.m文件
4.extension一般不寫代碼,寫在類的.m文件
總結: category 和 subclass(子類)
1.category只能為類添加方法,subclass既能為類添加方法又能添加實例變量
2.category新添加的方法成為類的一部分,能被子類繼承,subclass新添加的方法只有子類才有,父類不具有
3.category使用原始類的實例(-)或者原始類的調用方法(+),subclass只有子類才能使用
-------------------------------------Protocol 協議-----------------------------------------
只要遵守了協議即可成為代理
代理:自己不想干的事情讓比人去做,別人充當的就是代理
如果一個類想要遵守一個協議,直接在.h文件中的父類後加<協議名>在協議裡面,寫必須遵守的方法和可選擇遵守的方法如:
@protocol BoyfriendProtocol
@required //必須實現的方法
-(void)makeMoney;
@optional //可選擇的實現
-(void)cook; //做飯
-(void)clean; //清潔
-(void)funny; //幽默
@end