Object-C中分类
来源:互联网 发布:软件开发系统学习 编辑:程序博客网 时间:2024/05/07 18:35
什么是 objective-c 的分类?
有的时候,我们需要对原有的类添加一些功能(方法)作为源类扩展,他的功能是扩展类的能力。
分类需要注意的地方:
1:尽管分类可以访问原始类的实例变量,但是他不能添加自身的任何变量,如果需要添加变量,可以考虑创建子类。
2:分类可以重载该类的另一个方法,但是通常认为这种做法是卑劣的设计习惯。第一:重载一个方法后,再也不能访问原来的方法,因此,必须小心将被重载方法中的所有功能复制到替换方法中,如果确实需要重载方法,可以考虑常见子类,如果在子类中重载方法,仍然可以通过想super发送消息类来引用父类的方法。因此不必了解重载方法的内容就能够调用父类的方法,并向子类的方法添加自己的功能。
3:一个类,可以拥有多个分类
4:和一般接口不同的是,不必实现分类所有的方法,这个对程序的扩展很有用,因为可以在该类分类的声明所有的方法,然后在一段时间后在来是实现他。
5:记住,通过分类添加新的方法来扩展该类,不仅仅会影响该类,还会影响该类所有的子类,因此他的所有的子类都会继承这个分类,而不管这些子类愿意不愿意。
通过分类的方式可以为已存在的类添加新的方法,甚至不需要源码,有点像C#中的扩展方法。
这时提供一个例子是把一个字符串转换为驼峰式并且出掉单词空格。
首先编写头NSString+CamelCase.h
#import <Foundation/Foundation.h>
//NSString 表示将要添加分类的类名称,该类必须是已存在的。
//CamelCase 是为类添加的分类的名称。
//只能添加方法,不能添加变量。
//头文件命名惯例:ClassName+CategoryName.h
@interface
NSString
(CamelCase)
-(
NSString
*) camelCaseString;
@end
接着编写实现文件NSString+CamelCase.m
#import "NSString+CamelCase.h"
@implementation
NSString
(CamelCase)
-(
NSString
*) camelCaseString
{
//调用NSString的内部方法获取驼峰字符串。
//self指向被添加分类的类。
NSString
*castr = [
self
capitalizedString];
//创建数组来过滤掉空格, 通过分隔符对字符进行组合。
NSArray
*array = [castr componentsSeparatedByCharactersInSet:
[
NSCharacterSet
whitespaceCharacterSet]];
//把数组的字符输出
NSString
*output = @
""
;
for
(
NSString
*word in array)
{
output = [output stringByAppendingString:word];
}
return
output;
}
@end
最后编写测试文件main.m
#import <Foundation/Foundation.h>
#import "NSString+CamelCase.h"//添加该类
int
main (
int
argc,
const
char
* argv[])
{
NSAutoreleasePool
* pool = [[
NSAutoreleasePool
alloc] init];
NSString
*str = @
"My name is bill."
;
NSLog
(@
"%@"
, str);
str = [str camelCaseString];
NSLog
(@
"%@"
, str);
[pool drain];
return
0;
}
#import <Foundation/Foundation.h>
@interface student : NSObject
{
NSString *Name;
}
-(void)setName:(NSString *)_name;
-(NSString *)Name;
-(void)printValue;
@end
#import "student.h"
#import <Foundation/Foundation.h>
@implementation student
-(void)setName:(NSString *)_name
{
Name = _name;
}
-(NSString *)Name
{
return Name;
}
-(void)printValue
{
NSLog(self.Name,nil);
}
@end
#import <Foundation/Foundation.h>
#import "student.h"
@interface student (extSt)
-(void)printValueExt;
-(void)printValue;
@end
#import "studentExt.h"
@implementation student (extSt)
-(void)printValueExt
{
NSLog(@"这个是类扩展后添加的方法!");
}
-(void)printValue
{
NSLog(@"这个是重载后的函数的处理的结果!");
}
@end
#import <Foundation/Foundation.h>
#import "student.h"
#import "studentExt.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
/////////////////////
student *stu = [[[student alloc] init] autorelease];
[stu setName:@"this is orign NameStr"];
[stu printValue];
[stu printValueExt];
/////////////////////
[pool drain];
return 0;
}
- Object-C中分类
- Object-C中分类
- Object C中分类的使用
- object-c分类
- Object-c------分类
- object c的分类
- object-c 分类和扩展
- Object-C Category(OC分类)
- Object-c分类和协议
- iOS笔记---- object-c 分类
- Object-C学习笔记-Category(分类)
- 黑马程序员-Object C之分类
- Object-c基础编程学习笔记-分类
- Object-C加强 分类以及扩展
- Object-C学习笔记-Category(分类)
- Object-C 分类(Category) 和 扩展(Extension)
- object-c 中const !
- object-c 中括号[]
- 目标检测中背景建模方法
- Symmetric Tree
- android 签名
- Java编程的78条黄金法则
- svn分支开发与主干合并(branch & merge)
- Object-C中分类
- poj 3468 A Simple Problem with Integers
- matlab快捷键
- 类和对象
- 易混的英语单词——不断积累
- 大家了解纸箱包装设备吗?下面让我们一起学习一下吧!
- easyimage java图片处理类
- Java使用开源Rxtx实现串口通讯(串口开发)
- 图的遍历、拓扑排序、最短路径算法