在c++中我们可以多继承来实现代码复用和封装使程序更加简练。在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(category,又称类别)。类别可以不修改原来的类(父类),和派生类的情况下,为原有的类增加新的方法,但是分类不能增加实例变量。

格式(format):

@interface class_name(category_name)<protocol,....>

method _declaration;

....

@end

@implementation class_name(category_name)

method_implementation;

...

@end

新建一个AddressCard类,然后再新建一个文件 AddressCardCategory 用来声明和实现分类(category)

 1 #import <Foundation/Foundation.h>
 2
 3 @interface AddressCard : NSObject<NSCoding>{
 4     NSString* name;
 5     NSString* email;
 6 }
 7 @property (nonatomic,retain)NSString* name;
 8 @property (nonatomic,retain)NSString* email;
 9 -(id)initWithName:(NSString*)_name andEmail:(NSString*)_email;
10
11 @end

 1 #import "AddressCard.h"
 2
 3 @implementation AddressCard
 4 @synthesize name,email;
 5 -(id)initWithName:(NSString*)_name andEmail:(NSString*)_email{
 6     if(self= [super init])
 7     {
 8         self.name=_name;
 9         self.email=_email;
10     }
11     return self;
12 }
13 -(void)encodeWithCoder:(NSCoder *)aCoder{
14     [aCoder encodeObject:name forKey:@"_name"];
15     [aCoder encodeObject:email forKey:@"_email"];
16 }
17
18 -(id)initWithCoder:(NSCoder*)aDecoder{
19     if(self=[super init])
20     {
21         self.name=[aDecoder decodeObjectForKey:@"_name"];
22         self.email=[aDecoder decodeObjectForKey:@"_email"];
23     }
24     return self;
25 }
26 -(void)dealloc{
27     [name release];
28     [email release];
29     [super dealloc];
30 }
31 @end

#import <Foundation/Foundation.h>
#import "AddressCard.h"
@interface AddressCard(category)
-(void)uppercaseName;@end

1 #import "AddressCardCategory.h"
2
3 @implementation AddressCard(Category)
4 -(void)uppercaseName{
5     self.name= [name uppercaseString];
6 }
7
8 @end

 1 #import <Foundation/Foundation.h>
 2 #import "AddressCardCategory.h"
 3 int main (int argc, const char * argv[])
 4 {
 5
 6     @autoreleasepool {
 7         AddressCard* card1=[[AddressCard alloc]initWithName:@"shou" andEmail:@"abc@126.com"];
 8         [NSKeyedArchiver archiveRootObject:card1 toFile:@"/tmp/AddressCard.txt"];
 9         AddressCard* card4=[NSKeyedUnarchiver unarchiveObjectWithFile:@"/tmp/AddressCard.txt"];
10         NSLog(@"card 4 %@ ,%@",card4.name,card4.email);
11         [card4 uppercaseName];
12          NSLog(@"card 4 %@ ,%@",card4.name,card4.email);
13         [card1 release];
14         //[card4 release];
15
16
17     }
18     return 0;
19 }

执行结果:

2013-08-20 17:12:04.751 AddressCard[1079:707] card 4 shou ,abc@126.com
2013-08-20 17:12:04.758 AddressCard[1079:707] card 4 SHOU ,abc@126.com

[置顶] Objective-C,/,ios,/iphone开发基础:分类(category,又称类别)相关推荐

  1. [置顶] Objective-C ,ios,iphone开发基础:命名规范

    命名规范:http://bukkake.iteye.com/blog/695492  点击打开链接 转载于:https://www.cnblogs.com/pangblog/p/3292256.htm ...

  2. Objective-C ,ios,iphone开发基础:UIAlertView使用详解

    UIAlertView使用详解 Ios中为我们提供了一个用来弹出提示框的类 UIAlertView,他类似于javascript中的alert 和c#中的MessageBox(); UIAlertVi ...

  3. Objective-C ,ios,iphone开发基础:NSDictionary(字典) 和 NSMutableDictionary

    NSDictionary(字典),NSDictionary类似于 .net中的parameter,l类似于java中的map. 通过唯一的key找到对应的值,一个key只能对应一个只,而多个key可以 ...

  4. Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)

    第一步:新建一个单视图(single view)的工程, 命名为pickerTest,不要勾选下面两个选项,第一个是新版本里面的,第二个是单元测试,现在用不着. 点击next  ->creat之 ...

  5. Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作...

    SQLite  是一个轻量级的免费关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的内存就够了,可以在(http://www.sqlite.org ...

  6. IOS UI开发基础之超级猜图完整版本-08

    IOS UI开发基础之超级猜图完整版本-08 // // ViewController.m // 09-超级猜图 // // Created by 鲁军 on 2021/1/31. //#import ...

  7. Objective-c/iOS/iphone开发视频教程迅雷/高速下载

    转自:http://www.lwxshow.com/videos/objective-c-ios-iphone-development-video-tutorials-download-now-rea ...

  8. 新增迅雷下载地址:Objective-c/iOS/iphone开发视频教程迅雷/高速下载

    转自:http://www.lwxshow.com/archives/397 2012-4-10更新 大家访问 http://www.lwxshow.com/archives/397 看到一个2012 ...

  9. 前端取消置顶功能_短说开发日报:首页推荐频道刷新后首页置顶的数据没有加载出来的问题已修复(9.22周二)...

    短说社区论坛系统是想天软件推出的一款集社区论坛.电商商城.知识付费三大版块为一体的整合运营系统 同步支持H5.公众号.安卓.IOS.PC.多渠道小程序(微信.头条.百度.支付宝.QQ) SAAS版本. ...

最新文章

  1. Nova rebuild for boot from volume issue
  2. 字节跳动 ClickHouse 在 A/B 实验和模型训练的使用
  3. textfield获取其中内容_天涯明月刀天下镖镖旗数量 天下镖内容介绍
  4. SQL重复记录查询(转载)
  5. lame,把ios录音转换为mp3格式
  6. spring之bean的作用域scope的值的详解
  7. taylor+swift纽约公寓_国际巨星Taylor Swift有多爱豪宅?才30岁就有8套豪宅
  8. Vue3动态组件、缓存组件、分发组件
  9. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_Gradient Checking
  10. 使用 Preload/Prefetch 优化
  11. Mysql8安装教程——安装包版
  12. php 网页对话框插件,JavaScript_jquery插件hiAlert实现网页对话框美化,厌烦了IE浏览器的警告窗,伴 - phpStudy...
  13. dspic c语言教程,轻松学PIC之数码管篇 PIC单片机学习系列教程
  14. 网络工程师成长日记140-机遇都是碰出来的
  15. QQ号1941663132是一个诈骗
  16. win10 自动同步时间脚本
  17. 蚂蚁区块链第15课 JS SDK概述及API接口速查
  18. 苹果告诉你-想自己换电池延长iPhone寿命还是算了吧!
  19. 插值多项式的龙格现象的介绍与模拟
  20. 如何学习黑客技术?初级黑客入门

热门文章

  1. 常见排序算法时间复杂度
  2. linux中的fg命令
  3. springboot自动配置流程
  4. mybaits二十九:mybatis工作原理以及源码分析
  5. spring12:注解的方式实现di(依赖注入)
  6. linux 常用命令摘录
  7. React Hooks-概览
  8. java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
  9. C++函数的一些特性
  10. 【js基础】理清Object、Object.prototype、Function、Function.prototype