OC学习之路(7)
来源:互联网 发布:加入淘宝联盟 编辑:程序博客网 时间:2024/06/04 20:31
(一)类目(分类)
1. 重要知识
Ø 类目(Category)是用于对原有类的方法的扩展,这些类包括系统类和自定义类。
Ø 如果扩展的方法名跟原有类的方法名一样,则会覆盖原有的方法
Ø 类目可以对类的方法进行扩展,但不能扩展实例变量、属性。如果非要扩展,可以定义get/set方法,但其本质不是扩展了属性,只是扩展的是方法,而这个方法可以有点语法调用。给人的感觉是扩展了属性。例如:
@property(nonatomic,assign)float button
这样写,不会产生_button,并需要重写get/set方法,否则报错。
2. 类目方法的应用
Ø 类目是对现有的类进行延展,可以扩展Cocoa touch框架中的类,在类目中增加的方法会被子类继承,而且在运行时跟其他的方法没有区别。
Ø 作为子类的替代手段,不需要定义和使用一个子类,可以通过类目直接向已有的类里增加方法
Ø 对类中的方法的归纳,利用Categoty把一个庞大的类划分为小块来分别进行开发,从而更好地对垒中的方法进行了更新和维护。
3. 创建方式
Ø 创建文件(Command+N)à obejective-c File à FileType: Category ,Class: ,File: ;à 会产生.h.m两个文件,名称为“扩展类名”+“File名称(扩展方法名)” à 在类目.h文件中声明要扩展的方法,例如:
@interface NSString(VerifyEmail)
- (BOOL)verifyEmail;
@end
à 在 .m文件中实现扩展的方法
(二)延展(匿名的类目)
作用:在.m文件中,用于声明类的私有方法和私有变量/属性;
注意:延展中定义的方法,即为私有方法,此私有方法必须实现,如果方法缺乏实现代码,则编译器会报警告。
例如:
@interface ViewController ()
@property (nonatomic, assign) int count;
- (void)test;
@end
(三)协议(用于两个类之间的通信(数据传递))
1. 重要知识
用于声明一组方法,这些方法在当前类(协议本身的类)中不去实现,儿时由签订协议的另外的类实现,这些方法分为必须实现(@required)和可选实现(@optional)两类。
代码例:(在.h文件中声明协议)
@protocol CollegeProtocol <NSObject>
@optional
- (void)readBook;//读书
@required
- (void)attendClass;//上课
@end
2. 注意
协议本身是声明协议方法,自己不去实现,这些方法由签订了这个协议的类去实现。
@property(nonatmic, weak) id<bindUserInfo> delegate; //签订协议的属性要由weak修饰
(四)代理设计模式(利用协议)
当一个类要去完成某一个功能,但是这个类本身没法自己去完成,那这种情况下只能委托别的类帮助完成。在OC中这种使用协议达到类与类之间的通讯方式,就是代理(委托)设计模式。
- OC学习之路(7)
- OC学习之路(1)
- OC学习之路(2)
- OC学习之路(3)
- OC学习之路(4)
- OC学习之路(5)
- OC学习之路(6)
- OC学习之路(8)
- OC学习之路(9)
- OC学习之路(10)
- OC学习之路之内存管理
- OC学习之NSString
- OC学习之NSArray
- OC学习之NSNumber
- OC学习之NSdate
- OC学习之NSTimer
- OC学习之KVC
- OC学习之KVO
- 大文件写:
- JDK源码-java.lang.String
- scala 实现topN算法
- Servlet 简介
- 让我们成为开源软件测试者
- OC学习之路(7)
- 对话语料库
- warning C4129(vs 路径中常出现的‘\’)
- 设计模式-模板方法的使用
- Sping Mvc中Http请求返回String中文乱码问题深度解析
- 1111
- VideoRenderer源码解析
- PHP7使用Memcached
- Android实现图片的高斯模糊(两种方式)