注:小編在技術上仍是有很大的紕漏,發表此博客但願各位有路過的大牛人物給予評論,給於指正,小編在此很是感謝!此文章爲小編本身作的筆記,有不當之處望請指出,小編非常感謝,若用於一些抄襲的勾當,出現一些不可挽回的問題,小編在此聲明不負任何責任;xcode
1、類目:(Category)ui
是在原有類的基礎之上添加方法,在使用的時候只須要用原有類實例化出來的對象便可;spa
實際開發中什麼狀況下使用類目?code
已經封裝好的類,(不但願再改變原有類)對象
團隊裏面分工開發一個模塊的時候可使用本身定義的方法;接口
2、延展:(Extension)的基本概念和用法;開發
在xcode4.3以前直接使用self 調用方法 那時候會報錯,因此的用延展博客
就是在類中添加私有方法,延展中聲明的方法在類的自己的@interface 類名()和它對應的@end之間實現;io
類有時須要方法只有本身所見,咱們能夠經過延展類的方式定義類的私有方法;require
3、協議:Protocol
協議就是共同遵照的一個條約,只有一個聲明文件;
協議時能夠被任何類實現的方法,協議自己不是類,他是定義了一個其餘類可實現的接口;
協議是 只聲明 不實現
沒有實現的類目 又叫作 非正式協議
由於通常狀況下類都從NSObject的類目中所聲明的方法,這個類能夠實現也能夠不實現;
非正式協議是以圓括號表示,而正是協議是以<>來表示;
若是子類要建立協議時,只要在基類遵照某一協議就行;
在哪個類裏面導入了協議,就要在哪個類裏面 實現這個協議的方法,
NSObject的類目中所列出的方法表示可能但願要實現的方法,若是使用可能更好的完成工做;
注:
@required 必須 強制實現 不實現 就報錯;
@optional 選擇實現的
實例:
BOOL n = [xueSheng respondsToSelector:@selector(night)];
if (n!=NO) {
NSLog(@"糟了,沒有打卡!");
[xueSheng night];
}
else
{
NSLog(@"還好!");
}
解釋:
一、respondsToSelector://判斷能不能響應一個方法;
二、@selector方法選擇器 是 用來選擇方法的
三、判斷後是一個bool類型的,因此須要一個bool來接收;
四、if對協議進行肯定是否有協議;