Objective-C之Category的使用

简介:

Category

分类相关

category是OC的特有的语法

// 分类的声明

@interface ClassName (CategoryName)

NewMethod; //在类别中添加方法
 //不允许在类别中添加变量
@end
  • ClassName: 需要给哪个类扩充方法
  • CategoryName: 分类的名称
  • NewMethod: 扩充的方法

// 分类的实现

@implementation ClassName(CategoryName)

NewMethod
... ...
@end

ClassName: 需要给哪个类扩充方法
CategoryName: 分类的名称
NewMethod: 扩充的方法

注意:

1.分类是用于给原有类添加方法的, 它只能添加方法, 不能添加属性(成员变量)

@interface Person (NJ)
//{
// double _height;
//}

2.分类中的@property, 只会生成setter/getter方法的声明, 不会生成实现以及私有的成员变量

//@property (nonatomic, assign) double height;
验证方式:在main函数中调用property声明的属性,并且赋值,发现会奔溃

3.可以在分类中访问所有类中的.h中的属性

4.原类中和分类中有相同的方法,会调用分类中的方法,也就是说回忽略原类中的方法,所以开发建议,不要在分类写出原类中同名的方法。

5.如果多个分类中都有和原类中同名的方法,那么调用该方法的时候执行谁由编译器决定,会执行最后参与编译的一个分类。 怎么看分类谁先编译呢?

所以不建议在分类声明实现很多和原类同名的方法。

类扩展(Class Extension)

匿名分类或者匿名扩展:没有名字的分类

延展类别有称为扩展(Extendsion),是Category的一个特例。

  • 主要的作用:为某个类扩充一些私有的成员变量和方法
    • 写在.m文件中
    • 英文名是Class Extension

类扩展书写格式

@interface 类名 ()
@end

对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”


相关文章
|
Java iOS开发 C++
Objective-C类别(category)和扩展(Extension)的基本概念
Objective-C类别(category)和扩展(Extension)的基本概念
171 0
|
iOS开发 编译器 开发者
Objective-C中Extension与Category的使用
Objective-C 2.0增加了class extensions用于解决两个问题: 允许一个对象可以拥有一个私有的interface,且可由编译器验证。
867 0
|
6天前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
111 2
|
6天前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
17 2
|
6天前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
82 0
|
编译器 API iOS开发
iOS 代码规范格式 Objective-C(下)
iOS 代码规范格式 Objective-C(下)
195 0