1、子类 subClass
作用:可以使用类的继承来增添父类的变量和方法。
写法:在.h文件中
@interface Student : Person
2、分类 Category
作用:可以增添父类的功能,但不能定义变量。多用于不知道源码的情况下,对父类进行扩展。
写法:在.h和.m文件中,文件名为”父类名+分类名”格式。
在@interface @implementation 后 “父类名(分类名)”
3、Extension
作用:定义私有方法。可以隐藏不对外公布的方法。多用于隐藏一些中间步骤的方法。
写法:在.m文件中 @implementation 前实现
@interface Person ()
{
NSString * _age;
} - ( void )aa; @end
如此这样,就定义了私有方法。
4、protocol
作用:可以实现类似多继承的方法。一个类遵守多个协议。
写法:协议只有.h文件,定义了方法。
@required // 默认是必须实现的 - ( void )method1;
- ( void )method2;
@optional // 可以选择实现
- ( void )method3;
类的扩展
一 类目
(类目也称为分类,为没有源码的类添加方法。)
1.作用
1)可以扩展别人的类,可以作为子类的替代方法。
2)把同一类的代码放到多个文件中。
2.形式
1)文件名:目标类+类目名.h
目标类+类目名.m
2).h文件中
@interface 需要扩展的类的类名(分类名)
-( )method;
@end
eg:
为字符串添加一个类
NSString+SayHi.h
@interface NSString (SayHi)
-(void)sayHi;//为字符串添加方法
@end
NSString+SayHi.m
@implementation NSString (SayHi)
-(void)sayHi
{
NSLog(@"我是一个特殊字符串 %@,我有sayHi方法",self);
}
@end
3.注意
1)可以为同一个类添加多个类目,但类目名和方法不能重复。
2)不可以随意重写类中的方法。
3)所添加类与原类中方法同级,而且会被子类继承。
二 延展
(延展是特殊形式的类目)
1.作用
为自己的类添加私有方法
2.形式
@interface 类名
-( )method;
@end
@implementation 类名
……
@end
eg:
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.注意
1)不需要创建新文件,直接在原类的.m文件中声明和实现。
2)所谓私有时候仅.m通过[self method]访问,不能在外部通过[对象 method]访问。
三 协议
(协议是由@protocol 声明的一组方法列表,只声明方法,不具体实现)
1.作用
将方法定义剥离出来,形成一个单独的文件。
2.形式
@protocol 协议名<其他协议>
-()method;
@end
注:方法默认是@required 必须实现,如果可以不实现用@optional。
3.代理模式
(由别人帮自己实现某个功能的模式称为代理模式)
1)接受代理
@ interface 类名:父类名 <协议名>(多个协议之间用逗号隔开)
….
@end
2)确认协议
@implementation 类名
协议方法
{
}
@end
(代理是谁,谁接受并确认协议)
4.注意
1)协议声明了可以被任何类实现的方法。
2)协议定义了一个其他对象可以实现的接口。
作用:可以使用类的继承来增添父类的变量和方法。
写法:在.h文件中
@interface Student : Person
2、分类 Category
作用:可以增添父类的功能,但不能定义变量。多用于不知道源码的情况下,对父类进行扩展。
写法:在.h和.m文件中,文件名为”父类名+分类名”格式。
在@interface @implementation 后 “父类名(分类名)”
3、Extension
作用:定义私有方法。可以隐藏不对外公布的方法。多用于隐藏一些中间步骤的方法。
写法:在.m文件中 @implementation 前实现
@interface Person ()
{
NSString * _age;
} - ( void )aa; @end
如此这样,就定义了私有方法。
4、protocol
作用:可以实现类似多继承的方法。一个类遵守多个协议。
写法:协议只有.h文件,定义了方法。
@required // 默认是必须实现的 - ( void )method1;
- ( void )method2;
@optional // 可以选择实现
- ( void )method3;
类的扩展
一 类目
(类目也称为分类,为没有源码的类添加方法。)
1.作用
1)可以扩展别人的类,可以作为子类的替代方法。
2)把同一类的代码放到多个文件中。
2.形式
1)文件名:目标类+类目名.h
目标类+类目名.m
2).h文件中
@interface 需要扩展的类的类名(分类名)
-( )method;
@end
eg:
为字符串添加一个类
NSString+SayHi.h
@interface NSString (SayHi)
-(void)sayHi;//为字符串添加方法
@end
NSString+SayHi.m
@implementation NSString (SayHi)
-(void)sayHi
{
NSLog(@"我是一个特殊字符串 %@,我有sayHi方法",self);
}
@end
3.注意
1)可以为同一个类添加多个类目,但类目名和方法不能重复。
2)不可以随意重写类中的方法。
3)所添加类与原类中方法同级,而且会被子类继承。
二 延展
(延展是特殊形式的类目)
1.作用
为自己的类添加私有方法
2.形式
@interface 类名
-( )method;
@end
@implementation 类名
……
@end
eg:
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.注意
1)不需要创建新文件,直接在原类的.m文件中声明和实现。
2)所谓私有时候仅.m通过[self method]访问,不能在外部通过[对象 method]访问。
三 协议
(协议是由@protocol 声明的一组方法列表,只声明方法,不具体实现)
1.作用
将方法定义剥离出来,形成一个单独的文件。
2.形式
@protocol 协议名<其他协议>
-()method;
@end
注:方法默认是@required 必须实现,如果可以不实现用@optional。
3.代理模式
(由别人帮自己实现某个功能的模式称为代理模式)
1)接受代理
@ interface 类名:父类名 <协议名>(多个协议之间用逗号隔开)
….
@end
2)确认协议
@implementation 类名
协议方法
{
}
@end
(代理是谁,谁接受并确认协议)
4.注意
1)协议声明了可以被任何类实现的方法。
2)协议定义了一个其他对象可以实现的接口。