分类(category)和类扩展(extension) 详解

6人阅读 评论(0) 收藏 举报
分类:

什么时候使用分类(category)呢?

比如:


eg.1,我们已经写了很多的页面了,然后要所有类都要添加一个方法,用来收集一些信息,并且这些页面都继承自UIViewController中,我们就可以把代码添加到UIViewController就可以了。

eg.2,我们想要在原来类里边重写方法,或者添加自定义方法的时候,可以使用category来实现。


分类(category)中只能添加方法,不能添加成员变量;

分类(category)只能访问原来类的@protect@public成员变量,不能访问私有成员变量,如果非要访问的话,不能直接访问,但是可以写方法来访问;

分类(category)其实里边是可以添加成员变量的,category添加成员变量传送门

分类的添加过程如下:





然后生成的类JWTest1ViewController+unlock.h我们可以看到,.h文件如下


#import "JWTest1ViewController.h"


@interface JWTest1ViewController (unlock) // JWTest1ViewController 是原来的类 unlock是分类


- (void)userUnlock; // 这个是我们添加的方法


@end


.m文件如下


#import "JWTest1ViewController+unlock.h"


@implementation JWTest1ViewController (unlock)


- (void)userUnlock{

    NSLog(@"userUnlock");

}


@end


如何不用每个类里边都要添加头文件才能引用?还有分类的优先级是怎么样的呢?

下面我们来看一下类扩展(extension

其实类扩展我们经常见到,项目中也经常用到;先来看一下JWTest1ViewController.m中的代码


#import "JWTest1ViewController.h"


@interface JWTest1ViewController () // 这里就是类扩展(extension


@end


@implementation JWTest1ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


类扩展是category的一个特例,也叫匿名分类,为该类添加一些属性和方法。

并且写在.m中的变量和方法都是私有的,写在.h中的变量和方法就是公共的。


查看评论

OC基础之类别(Category)和扩展(Extension)

类别(Category)类别文件的创建 1.新建文件 2.选择iOS平台Source中的Object-C Fie 3.选择File Type为Category,则可建立相应类的类别文件 类别文件...
  • csdn_howe
  • csdn_howe
  • 2016-11-29 16:01:19
  • 2189

iOS分类(category),类扩展(extension)—史上最全攻略

本文会带你看懂分类,类扩展和匿名分类的前世今生,从看懂到会用。
  • u012946824
  • u012946824
  • 2016-07-01 11:05:26
  • 4197

IOS 分类(category)、扩展(Extension)和继承(inheritance)的区别?

前言        一直分不清分类和扩展有什么区别?!所以本着二杆子的精神,一定要搞清楚。iOS中category是对...
  • benbenhai1999
  • benbenhai1999
  • 2016-05-26 09:53:17
  • 3205

分类(category)和类扩展(extension)

1.分类(category)的作用 1.1作用:可以在不修改原来类的基础上,为一个类扩展方法。 1.2最主要的用法:给系统自带的类扩展方法。 2.分类中能写点啥? 2.1分类中只能添加“方法”,不能...
  • taylorlannister
  • taylorlannister
  • 2017-12-04 10:37:16
  • 36

分类 & 类扩展(category / extension)

1.分类(category)1.1 分类存在的原因:在不破坏当前类的前提下给它添加方法,如果分类中重写了当前类的方法那么将优先使用分类中的方法1.2 分类的好处: 1.1中的原因就说明了一个好处:当需...
  • z794614061
  • z794614061
  • 2017-04-05 14:15:38
  • 202

OC语言学习 (五) Category分类 和 类的延展Extension

分类: 在不修改原有的类的基础上增加新的方法 一个庞大的类可以分模块开发 一个庞大的类可以由多个人来编写,更有利于团队合作 除有的Person.h和Person.m,新增两个文件 Person+...
  • jjwwmlp456
  • jjwwmlp456
  • 2014-12-10 15:27:53
  • 6490

swift开发 创建Extension(即OC中的category)

swift开发 创建Extension(即OC中的category)
  • syg90178aw
  • syg90178aw
  • 2016-05-05 14:16:53
  • 5379

Swift学习这二十二:扩展(extension)

扩展(extension) 扩展是向一个已有的类、结构体或枚举类型添加新的功能。在swift中扩展是没有名字的, 但在Objective-C中Category是有名字的,而且只能扩展类(类别) ...
  • woaifen3344
  • woaifen3344
  • 2014-06-13 23:34:43
  • 23614

iOS之类别(Category)、类扩展、继承的区别

iOS在2.0就已经推出类别(Category),它允许开发者在不改动原有类的情况下,对该类进行扩展使用。我们知道,OC 和 Swift 都具备单继承特性,我们也可以通过新建子类继承父类的方式,实现类...
  • LVXIANGAN
  • LVXIANGAN
  • 2017-08-01 12:09:19
  • 787

Objective-C分类 (category),扩展(Extension)和协议(protocol)

@类目-分类(category) 1.类目: 类目(也成类别:Category)是一种为现有类添加新方法的方式 2.类目的局限性: 1)类目无法向已有的类中添加实利变量; 2)如果类目中的方法和已有类...
  • humingtao2013
  • humingtao2013
  • 2014-03-18 19:26:21
  • 4436
    个人资料
    持之以恒
    等级:
    访问量: 6038
    积分: 513
    排名: 9万+
    文章分类
    最新评论