1.類目(類目也稱爲分類,爲沒有源碼的類(系統類、別人的類)添加方法)
1)作用
可以擴展別人的類,可以作爲子類的替代方法。
把同一類的代碼放到多個文件中。
2)形式
文件名:.h文件(目標類+類目名.h) .m文件(目標類+類目名.m)
3)注意
可以爲同一個類添加多個類目,但類目名和方法不能重複
不要隨意重寫原類中的方法
所添加類與原類中方法同級,而且會被子類繼承
Demo:
爲字符串添加一個類目
NSString+SayHi.h
@interface NSString (SayHi)
-(void)sayHi;//爲字符串添加方法
@end
NSString+SayHi.m
@implementation NSString (SayHi)
-(void)sayHi
{
NSLog(@"我是一個特殊字符串 %@,我有sayHi方法",self);
}
@end
2.延展(延展是特殊形式的類目)
1)作用
爲自己的類添加私有方法
2)形式
這是在.m文件中
@interface 類名(延展名,可以爲空)
-(返回類型)method;
@end
@implementation 類名
-(返回類型)method
{
}
@end
3)注意
不需要創建新文件,直接在原類的.m文件中聲明和實現。
所謂私有時候僅.m通過[self method]訪問,不能在外部通過[對象 method]訪問。
Demo:
Person.h
@interface Person : NSObject
-(void)sayHi;
@end
Person.m
@interface Person(extension)//延展
-(void)test;//聲明
@end
@implementation Person
-(void)sayHi
{
[self test];
}
-(void)test//實現
{
NSLog(@"...");
}
@end
3.協議(協議是由@protocol 聲明的一組方法列表,只聲明方法,不具體實現)實例說明代理
1)作用
將方法定義剝離出來,形成一個單獨的文件。
2)形式
@protocol 協議名<其他協議>
@required
-(返回類型)method;
@optional
-(返回類型)method;
@end
注:方法默認是@required 必須實現,如果可以不實現用@optional。
3)代理模式 (實例說明代理)
(由別人幫自己實現某個功能的模式稱爲代理模式)
接受代理(.h文件中)
@interface 類名:父類名 <協議名1,協議名2,協議名3>(多個協議之間用逗號隔開)
@end
確認協議(.m文件中)
@implementation 類名
協議中聲明的方法方法
{
}
@end
(代理=誰,誰接受並確認協議)
4)注意
協議聲明瞭可以被任何類實現的方法
協議定義了一個其他對象可以實現的接口