本帖最后由 SSIrreplaceable 于 2016-7-8 12:10 编辑
一、Category
1.不同的翻译名称:分类、类别、类目(一般叫分类)
2.分类是Objective-C特有的语法,其他语言没有。
3.作用
(1).可以不用修改一个类的基础上扩充这个类
(2).一个庞大的类可以分模块开发,可以有多人开发,方便团队合作
4.注意
(1).只能增加方法,不能增加成员变量
(2).在分类中使用@property只会生成方法声明
(3).分类可以访问原来类的成员变量
(4).如果分类和原来类出现同名的方法,优先调用分类中的方法,原来类中的同名方法会被忽略。
5.分类的编译顺序:多个分类有同名的方法,则执行最后编译的文件。
6.注意:不推荐写与原有类同名的方法名
7.分类名一般写分类要实现的功能或编程者的名字
8.当给Foundation框架中的类写分类时,头文件名字为“原类名+分类名.h”,实现文件名字为“原类名+分类名.m”
9.当给自己写的类分模块时,可以把分类的声明都写在原类声文件,把分类的实现写在原有类的实现文件中
如下代码:
- #import <Foundation/Foundation.h>
- @interface Cat : NSObject
- @property (nonatomic,copy) NSString *colour;
- - (void)eat;
- - (void)play;
- @end
- @interface Cat (skill)
- - (void)catchAMouse;
- @end
- ---------------------------------------------------------------------------------------------
- #import "Cat.h"
- @implementation Cat
- - (void)eat {
- NSLog(@"吃吃吃...");
- }
- - (void)play{
- NSLog(@"玩玩玩...");
- }
- @end
- @implementation Cat (skill)
- - (void)catchAMouse {
- NSLog(@"抓老鼠咯...");
- }
- @end
复制代码 二、Extension
1.不同的翻译名称:扩展、延展
2.类扩展就比分类少一个分类名,但括号不能少,是分类的一个特例,也称匿名分类。
2.作用:可以为类添加一些私有的属性(成员变量、实例变量)和方法。
3.一般把类扩展写在.m文件中。
4.格式如下:
- #import <Foundation/Foundation.h>
- @interface Cat : NSObject
- @property (nonatomic,copy) NSString *colour;
- - (void)eat;
- - (void)play;
- @end
- -----------------------------------------------------------------------------------
- #import "Cat.h"
- @interface Cat ()
- - dance;
- @end
- @implementation Cat
- - (void)eat {
- NSLog(@"吃吃吃...");
- }
- - (void)play{
- NSLog(@"玩玩玩...");
- }
- - dance {
- NSLog(@"跳跳跳...");
- }
- @end
复制代码
|