如果有如下一个类

#import <Foundation/Foundation.h>

@interface Person : NSObject
@property int age;
@end @implementation Person @end

category可以在不修改Person类的代码,不用子类继承的方式扩展其方法

(实际等同于将一个类拆分在不同的文件中)

建立如下的category文件

#import "Person.m"

@interface Person (yangys)
- (void)study;
@end @implementation Person (yangys)
- (void)study
{
NSLog(@"%d",self.age);
}
@end

此文件的文件名为Person+yangys.m

则相当于Person类拥有了-(void)study方法

在main函数中调用如下:

#import <Foundation/Foundation.h>
#import "Person.m"
#import "Person+yangys.m" int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
p.age = ;
[p study];
}
return ;
}

结果:

-- ::28.284 CategoryDemo[:]
Program ended with exit code:

注意:

1.category方法实现中可以访问原类中声明的成员变量;

2.category可以重新实现原类中的方法,但是会覆盖掉原类的方法,会导致原类的方法无法再使用;

3.调用优先级:category-> 原类-> 父类

4.如果多个category中拥有同样的方法,则最后编译的category中的方法有效。

objective-c中的category的更多相关文章

  1. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  2. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  3. Objective-C中的Category(分类)

    Objective-C中的Category(分类) 1 Category概念:动态的为已经存在的类加入新的行为(方法) 2 Category(分类)创建的方法 (1)通过Xcode生成分类 (2)能够 ...

  4. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  5. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  6. Objective-C( Category 分类,非正式协议,分类延展)

    分类: 主要是给原来类增加一些方法;不可以增加成员变量 Person (Person+eat) 非正式协议: 非正式协议就是类别,即凡是NSObject或其子类Foundation框架中的类增加的类别 ...

  7. ios中的category与extension

    http://blog.csdn.net/haishu_zheng/article/details/12873151   category和extension用来做类扩展的,可以对现有类扩展功能或者修 ...

  8. Objective - C中属性和点语法的使用

    一.属性        属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性         ...

  9. OC中分类(Category)和扩展(Extension)

    1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...

随机推荐

  1. jquery实现无外边框table

    jquery实现无外边框table 在需要设为无外边框的table上加上class noOutBorder <tableclass="noOutBorder"> < ...

  2. ubuntu下安装opencv 2.4.9 脚本,支持摄像头和cuda

    arch=$(uname -m) if [ "$arch" == "i686" -o "$arch" == "i386" ...

  3. mysql 中文乱码的解决办法

    I would not suggest Richies answer, because you are screwing up the data inside the database. You wo ...

  4. canvas createRadialGradient 用法

    径向渐变,就是环形的渐变了,由圆心(或者是较小的同心圆)开始向外扩散渐变的效果,听着有些抽象,往下看图一下子就明白了.线性渐变指定了起点和终点,径向渐变则指定了开始的结束园的圆心和半径.这里使用cre ...

  5. java request判断微信客户端访问

    微信客户端访问时候user-agent信息如下: Mozilla/5.0 (Linux; Android 5.0.1; M040 Build/LRX22C) AppleWebKit/537.36 (K ...

  6. Dreamweaver中清除php代码中多余空行的方法

    使用DW自带的搜索功能,利用正则表达式 使用正则表达式搜索:\r\n\s*\r\n即可搜到代码中的空行,再用回车符\n替换即可消除代码中的多余空行

  7. 你知道用AngularJs怎么定义指令吗?

    前言 最近学习了下angularjs指令的相关知识,也参考了前人的一些文章,在此总结下. 欢迎批评指出错误的地方.   Angularjs指令定义的API AngularJs的指令定义大致如下 ang ...

  8. 基于smack的xmpp packet 重写

    基于Smack 实现Notification数据包.smack的类中有一个org.jivesoftware.smack.packet.IQ只需对他重写即可,在做的时候其实可以简单一点的,如果你使用ti ...

  9. android studio常用快捷键(不断补充)

    1.查找类  ctrl + n 2.查找全局文件 双击shift 3.返回上一次编辑的地方 ctrl + shift + backspace 4.代码格式化ctrl + alt + L 5.查看类的结 ...

  10. velocity-字母序号 list

    版权声明:本文为博主原创文章,未经博主允许不得转载. [需求] 遍历一个list,同时需要在每个item前面显示字母序号,例如A,B,C,D [代码] #set($zimu = ["A&qu ...