关于 iOS 分类(Category)的实现代码

其实质是对一个类的扩充,对类扩充的方法有两种:

(1)通过继承(经常用到)

(2)通过分类

一个已知类Name

其头文件Name.h

#import <Foundation/Foundation.h>

@interface Name : NSObject

@property(strong,nonatomic)NSString* nameStr;

-(Name *)init:(NSString*)nameString;

-(void)nameValue;

@end

其实现文件 Name.m

#import "Name.h"

@implementation Name

-(Name *)init:(NSString*)nameString

{

Name * name = [Name new];

name.nameStr = nameString;

return name;

}

-(void)nameValue

{

NSLog(@"----%@--",self.nameStr);

}

@end

再新建一个头文件Name+change.h用来声明其所要扩充的方法

源码:

#import "Name.h"

@interface Name(change)

-(void)addNameID:(NSString *)str;

@end

再新建一个实现文件Name+change.m用来实现自己扩充的方法

#import <Foundation/Foundation.h>

#import "Name+change.h"

#import "Name.h"

@implementation Name (change)

-(void)addNameID:(NSString *)str

{

NSLog(@"---%@--%@--",self.nameStr,str);

}

@end

其测试文件选择命令行

main.m

#import <Foundation/Foundation.h>

#import "Name+change.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Name * name1 = [[Name alloc] init:@"wangfei"];

[name1 nameValue];

[name1 addNameID:@"898989"];

}

return 0;

}

其测试结果:

2015-07-11 16:34:53.051 Category[1462:60100] ----wangfei--

2015-07-11 16:34:53.053 Category[1462:60100] ---wangfei--898989--

Program ended with exit code: 0

 

 

时间: 2024-10-02 12:30:45

关于 iOS 分类(Category)的实现代码的相关文章

Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结

1. Arc的使用 Arc是自动内存管理: arc的使用原则 1).只要对象没有任何强类型指针引用就会被释放’. 2).只要对象被任何强类型指针指引就不会被释放. 弱指针:__weak 被__weak修饰的指针就被称为弱型指针: 强类型指针 默认的指针都是强类型指针: 被__strong修饰的指针也是强类型指针. 使用Arc时可以重写dealloc方法,但是在重写方法时不能手动调用[super dealloc]: 在Arc中通过@property生成的属性如果是OC的对象那么要用Strong来修

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category,覆盖原类的方法,即使不引用该category头文件,也能覆盖,respondsToSelector:方法也能响应.2.category,不可以有私有变量,但是可以有@property的声明,property的声明只是声明了该类的set,get方法(需要引用该category的头文件),但是categ

iOS学习笔记-协议,代码块,分类

在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法.熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范.也就是说在ObjC中@protocol和其他语言的接口定义是类似的,只是在ObjC中interface关键字已经用于定义类了,因此它不会再像C#.Java中使用interface定义接口了. 假设我们定义了一个动物的协议AnimalDelegate,人员Person这个类需要实现这个协议,请看下面的代码: AnimalDelegate.h // // A

iOS 使用category将复杂的类拆分

在开发过程中,我们应该尽量保证代码的整洁性,方法尽量的简短,一个方法只做一件事情,而类也不应该过于复杂.很多时候,我们会一直往一个类里面添加代码,最终,这个类可能成为一个"庞然大物".在iOS开发中,我们可以使用category将类进行拆分. 如下图所示,我要实现一个做题功能,上方矩形框是一个工具栏,为答题提供一些辅助功能,下方矩形框用来显示题目和作答. 我为这个类命名为PracticeVC,自己画了了类图(UML都是我自己瞎琢磨,也不知道这样画对不对). 它包含一个AnswerTop

iOS分类底层实现原理小记

http://www.jianshu.com/p/b7169a5a558e OS 分类底层是怎么实现的?本文将分如下四个模块进行探究 分类的结构体 编译时的分类 分类的加载 总结 本文使用的runtime源码版本是 objc4 - 680文中类与分类代码如下 //类 @interface Person : NSObject @property (nonatomic ,copy) NSString *presonName; @end @implementation Person - (void)d

Objective-C 分类Category

OC提供了一种可以在不修改类的源码基础上,扩展类的方法的功能,"分类"Category,这个机制和C#中的扩展方法类似,一般用于在不方便修改类的源码时(如OC系统相关的类库),但有有需求要拓展类的方法,可以使用分类来实现. Java中应该是没有提供相关的机制,但是Java可以通过动态代理来实现AOP,在切入点前后执行代码逻辑,个人认为比OC还要方便. // // Girl.h // 10_Category // // Created by apple on 14/12/23. // C

iOS类别(Category)

iOS类别(Category)与扩展(Extension) 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. #import @interface NSObject (Category) - (void)myMethod; @end 这是一个最简单的Category,作用于NSObject类,给NSObject添加了一个方法. 使用Category需要注

黑马程序员---OC基础7【ARC概念】【ARC对象内存管理】【分类Category】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [ARC概念]   1.指针的分类 1)强指针,默认的情况下,所有的指针都是强指针,关键字strong: 2)弱指针,_ _weak关键字修饰符的指针 2.ARC概念 自动引用计数 永远不要写retain和release.autorelease三个关键字 编译器会在编译的时候自动插入retain和release.autorelease, 是一个编译器的特性:“垃圾回收”是运行时的特性 3.ARC工

Objective-C分类 (category)和扩展(Extension)

1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似. 我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义. 下面就是定义并使用分类的例子程序,通过下面代码,我们可以给Object-C中的NSString 添加camelCaseString分类,使用camelCaseString方

ios 编程--使用代码创建新的相册随加项目

2013-04-23 13:29:04| 分类: 默认分类 |举报|字号 订阅 编写ios 编程--使用代码创建新的相册,是参考http://www.touch-code-magazine.com/ios5-saving-photos-in-custom-photo-album-category-for-download/来写的. ALAssetsLibrary+CustomPhotoAlbum.h 里的代码是: #import <Foundation/Foundation.h> #impor