[objective-c] 03 - 类目 延展 协议
2015-02-04 11:47
405 查看
本章主要讲解OC语言特性
类目(Category)延展(Extension)
协议(Protocol)
1.类目
OC语言中的类目机制只有一个作用:为任何一个类添加方法现在我们创建一个Student类
@interface Student : NSObject @property(nonatomic,strong)NSString * name; @end @implementation @end
如果想为Student类添加一个方法,现在有两种方法
直接修改Student类的源码,声明一个方法并实现。
使用类目。
在无法获取类的源码且需要给一个类添加方法的情况下,类目的作用就非常重要了。
创建类目的语法也非常简单,代码如下
@interface Student (Test) -(void)test; @end
@implementation Student (Test) -(void)test { NSLog(@"这里是Student类目的test方法"); } @end
声明和实现的关键字都和之前一样。
不同的是,声明的时候不需要指定父类,而是直接写要添加方法的类的名字,但后面一定要加一个括号,且括号里面写上类目名字。一个类可以有多个类目。
有了这个类目之后,虽然Student类的源码中没有test方法,但仍然可以正常用Student对象去调用这个方法。
Student * s = [[Student alloc] init]; [s test];
2.延展
延展可以看作是一种匿名的类目,类有时需要一些只为自己所见所用的私有方法,这种私有方法可以通过延展的方式来声明。比如上文中的Student类有一个作弊的方法,不想被外界看得见,但又不想影响本身调用。这个方法就可以声明在延展内,而方法的实现仍然在Student的类内。
@interface Student () -(void)zuobi; @end
通常我们会将类的声明放在扩展名为.h的文件内,实现放在扩展名为.m的文件内。在生成的可执行文件包中.m文件会被编译加密成.a文件,且不可逆转。
Student.h文件
@interface Student : NSObject @property(nonatomic,strong)NSString * name; @end
Student.m 文件
@interface Student () -(void)zuobi; @end
@implementation Student (Test)
-(void)test
{
NSLog(@"这里是Student类目的test方法");
}
-(void)zuobi
{
NSLog(@"正在作弊");
}
@end
在这里我们看到,通常将延展的声明也放在.m文件中,这样便可以隐藏类的方法,不被外界所发现且类内可以正常使用。
3.协议
OC中的协议为一组方法的声明。不需要实现。遵守协议的类负责实现协议中的方法。协议使用
@protocol关键字进行声明。
其声明的方法中分为必须实现的方法和可选实现的方法。分别用
@required和
@optional关键字标示。
如果不写默认为必须实现的方法。
@protocol Test <NSObject> @required -(void)fun1; // 遵守该协议的类,必须实现的方法 @optional -(void)fun2; // 遵守该协议的类,可选实现的方法 @end
制定协议很简单,我们可以通过协议去规定一个对象的行为。
例如下面的方法
-(void)test:(id<Test>)obj;
这个方法便要求,
obj对象必须是遵守Test协议的类创建的对象。
@property id <Test>obj;
同样,属性对象也可以用协议进行规定。
相关文章推荐
- 【objective-c】类目 延展 协议
- objective-c基础语法学习之--(5):类目,延展,协议,代理
- IOS开发之路-Objective-C 类目、延展、协议
- Objective-C 基础知识之(十三):类目、延展、协议、代理等的基本概念
- objective-c延展类目协议
- Objective-C中的类目,延展,协议
- Objective-c的类目、延展、协议
- Objective-c:类目、延展、协议
- 类目延展代理协议
- Objective-C学习笔记类目、协议
- OC学习心得之延展类目协议
- iOS开发之 类目,延展,协议
- 类目、延展、协议
- 类目-延展-协议
- OC-类目延展协议
- 类目,延展,协议的基本概念
- iOS软件开发 类目延展协议的使用
- objective c 类目 延展 协议
- 类目, 延展, 协议