首页 > 其他 > 详细

[OC笔记] Category分类之见解

时间:2014-03-18 12:00:42      阅读:453      评论:0      收藏:0      [点我收藏+]

用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类。但是OC里面有更好的方法,那就是分类。

那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作的时候,就用不着担心合并

代码产生的冲突了~因为我们可以定义属于自己的分类。但是使用分类的时候却不能向原先类中添加字段,如果想添加方法,那

应该使用继承来实现。

话不多说,我们直接上代码,我前几篇日志中提到一个student类,里面的方法是在是太单调了,只有一个keepBook的方法,现在

我需要让他支持一个动作:"阅读书本"。但是我又不想更改这段Student代码。这时,我就使用分类了

1.新建Student+Read.h和Student+Read.m文件,构成咱们的分类

2.开始写代码~

头文件中代码如下,我给这个分类中添加一个方法

bubuko.com,布布扣
#import "Student.h"

@interface Student (Read)

-(void)readBook;

@end
bubuko.com,布布扣

实现文件代码如下

bubuko.com,布布扣
#import "Student+Read.h"

@implementation Student (Read)

-(void)readBook{
    //因为咱们的Book已经声明好了description方法
    //所以咱们直接用%@就可以答应书本的内容了
    //不清楚的同学可以看下上篇博客
    NSLog(@"书本的内容是>>>>%@",[self mBook]);
}
@end
bubuko.com,布布扣

这样,咱么就已经成功的给student这个类扩充了一个readBook这个方法了

3.接下来咱们就应该去调用这个新的student了

因为我们要使用的是扩展的这个Student对象,所以咱们应该import"Student+Read.h"这个头文件

看代码:

bubuko.com,布布扣
#import <Foundation/Foundation.h>
//导入book和student的声明
#import "Book.h"
//#import "Student.h"
#import "Student+Read.h"
//这是一个简单的宏,java写多了,各位理解万岁
#define ptr_(m) *(m)

int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        //先创建一个Book对象
        Book ptr_(mBook)=[[Book alloc]initWithPages:200 andContents:@"我是内容"];
        //创建一个Student对象
        Student ptr_(mStudent) =[[Student alloc]initWithId:250];
        //让学生持有一本书
        [mStudent keepBook:mBook];
        //调用这个扩充过的读书代码
        [mStudent readBook];
        //释放书籍对象
        [mBook release];
        //释放学生对象
        [mStudent release];
    }
    return 0;
}
bubuko.com,布布扣

OK,大功告成,看下运行结果

bubuko.com,布布扣

有错误或者您有更好的见解还请您多多拍砖~

[OC笔记] Category分类之见解,布布扣,bubuko.com

[OC笔记] Category分类之见解

原文:http://www.cnblogs.com/louzhuhaha/p/3606568.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!