黑马程序员技术交流社区

标题: 关于OC分类(Category)的问题! [打印本页]

作者: 悟中生有    时间: 2014-4-9 15:32
标题: 关于OC分类(Category)的问题!
本帖最后由 悟中生有 于 2014-4-9 16:11 编辑

可以创建分类的对象吗?
这一点有点迷惑,求解?

作者: 周宇华    时间: 2014-4-9 15:50
分类是对原来类的方法的扩展,创建原来类的对象,就自动有了分类的方法了。
作者: 程浩    时间: 2014-4-9 15:51
本帖最后由 程浩 于 2014-4-9 15:56 编辑

分类:可以给某一个类扩充一些方法(不修改原来类的代码)
在不改变原来类内容的基础上,可以为类增加一些方法
注意:
1.不可以扩充成员变量,只能加方法
2.在分类方法的实现中可以访问原来类中声明的成员变量
3.分类优先级最高,当调用一个方法:分类(最后参与编译的分类优先)---->原来类---->父类
4.如果多个分类扩展实现了同一个方法,则最后编译的点m文件覆盖前面的方法,被先调用。
这就是说,不是新建一个对象使用分类方法,而是使用原来的对象来使用分类中的方法

相当于,你修建了一条铁路,本来只能跑拉煤的火车,现在,你要跑高铁,你只需要造一个高铁,把高铁放到上面就行了
  1. //声明
  2. Person+mj.h中:
  3. #import "Person.h"
  4. @interface Person (MJ)
  5. - (void)study;
  6. @end
  7. //实现
  8. Person+mj.m中:
  9. #import "Person+mj.h"
  10. @implementation Person (MJ)   //一般写分类模块名称
  11. - (void)study
  12. {
  13.         NSLog(@"学习-------");
  14. }
  15. @end
  16. //调用
  17. #import <Foundation/Foundation.h>
  18. #import "Person.h"
  19. #import "Person+mj.h"
  20. int main()
  21. {
  22.         Person *p = [[Person alloc] init];
  23.         [p test];//person中有的方法
  24.         [p study];//在不改变person类的声明实现,当不能实现继承时,可以通过分类来添加方法
  25.         return 0;
  26. }
复制代码






作者: 悟中生有    时间: 2014-4-9 16:02
周宇华 发表于 2014-4-9 15:50
分类是对原来类的方法的扩展,创建原来类的对象,就自动有了分类的方法了。 ...

是的 分类是这样使用的,可是我想知道的是为什么分类不能创建对象呢?
作者: 周宇华    时间: 2014-4-9 16:04
悟中生有 发表于 2014-4-9 16:02
是的 分类是这样使用的,可是我想知道的是为什么分类不能创建对象呢?

分类是对类的方法扩充,他不是类,所以不能创建对象。
作者: 悟中生有    时间: 2014-4-9 16:06
程浩 发表于 2014-4-9 15:51
分类:可以给某一个类扩充一些方法(不修改原来类的代码)
在不改变原来类内容的基础上,可以为类增加一些 ...

谢谢指教!我想弄明白的是分类为什么不能创建对象,,,
作者: 悟中生有    时间: 2014-4-9 16:08
周宇华 发表于 2014-4-9 16:04
分类是对类的方法扩充,他不是类,所以不能创建对象。

也就是说分类只是原类的一个扩展功能吧!
作者: 周宇华    时间: 2014-4-9 16:15
悟中生有 发表于 2014-4-9 16:08
也就是说分类只是原类的一个扩展功能吧!

对。就是这样。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2