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)注意
协议声明了可以被任何类实现的方法
协议定义了一个其他对象可以实现的接口