四、oc中分类的基础知识学习
2015-03-10 14:27
141 查看
------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>、<a href="http://www.itheima.com" target="blank">.Ios培训</a>、期待与您交流! -------
oc中的分类,与该类既不是继承关系,也不是组合关系,它是类的一种补充。分类有着它特殊的的作用,分类可以在不改变原来类的内容的基础上,增加类的一些方法。
代码演示:
main函数:
import <Foundation/Foundation.h> #import "Animal.h" #import "Animal+twh.h" int main() { Animal *a = [[Animal alloc] init]; [a run]; return 0; }
Animal+twh.h:
#import "Animal.h" @interface Animal (twh) - (void)run; @end
Animal+twh.m:
#import "Animal+twh.h" @implementation Animal (twh) - (void)run { NSLog(@"The animal is running......"); } @end
首先从分类的命名上可以看出,一般情况分类后面可以以程序开发者的名字的首个拼音字母作为开头,创建好的分类,在编译器里面的名字为 类名+分类名。头文件为.h文件,可以执行文件为.m文件。更多情况下,是以该分类实现的类容而命名,这样直观简洁。
接着,需要注意的是,在main函数中必须得写上分类的.h,如 #import"Animal+twh.h"。为什么是写.h文件而不是写为.m文件呢。这是因为在点击运行程序时,xcode会将这个文件夹中的所有.m文件都一起加载起来运行,main函数也为一个.m文件。如果在main里面写入.m的头文件,则会出现报错,报重复写入.m文件的错误。
由上面的代码演示,xcode的现实结果,可知,类对象可以直接调用分类中的方法,与调用类中的方法,在代码的写法上是一样的。但是需要注意的事,若分类中与类中拥有同样名字的方法时,分类中的方法会覆盖掉类中原有的方法。
例如:
main函数:
#import <Foundation/Foundation.h> #import "Animal.h" #import "Animal+twh.h" int main() { Animal *a = [[Animal alloc] init]; [a check]; return 0; }
Animal.m:
#import "Animal.h" @implementation Animal - (void)check { NSLog(@"perform the Ainmal's check method......"); } @end
Animal+twh.m:
#import "Animal+twh.h" @implementation Animal (twh) - (void)run { NSLog(@"The animal is running......"); } - (void)check { NSLog(@"perform the Ainmal+twh's check method......"); } @end
打印结果为:
一般情况下,并不提倡在分类中写与类中同名的方法,这样会覆盖掉原类中的方法。若一个类同同时拥有多个分类时,并且不同分类中拥有同名的方法时,调用方法时,会执行类中的方法?还是某一个分类中的方法呢?
有一个原则不变的是,调用的优先级为:分类---->类---->父类。因此上面所说的情况,会执行分类中的方法,但是执行哪个分类中的方法呢?此时,遵循的是,执行最后一个编译的.m文件的分类中的方法。我们可以打开xcode,查看编译的顺序。
例如:
由上图可知,最后一次编译的是Animal+twh.m,那么执行的将是这个分类中的同名的方法。
最后需要注意的是,分类是不能增加原来类的成员变量的,只能增加方法,(类方法与对象方法都可以增加),分类的方法的实现中,是可以访问原来类中的成员变量的。
相关文章推荐
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
- IOS学习之路--OC的基础知识
- python apply的一点知识 分类: python基础学习 2013-12-11 13:58 875人阅读 评论(0) 收藏
- 黑马程序员——OC基础学习(四)---封装,继承和多态的学习知识总结
- oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍
- IOS学习之路--OC的基础知识
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
- OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏
- oc基础知识:属性、协议和分类
- OC基础:getter和setter,@public @protected @private 分类: ios学习 OC 2015-06-15 19:23 22人阅读 评论(0) 收藏
- OC学习笔记之-OC基础知识(类于对象)
- 黑马程序员——OC基础学习(二)---对象方法和类方法的学习知识总结
- OC基础语法学习6:分类的使用
- OC学习笔记之Block基础知识
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
- 【黑马程序员-学习笔记】OC-基础知识总结
- iOS 阶段学习第11天笔记(OC基础知识)