OC中类别(Category)的属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC中类别(Category)的属性相关的知识,希望对你有一定的参考价值。
参考技术A 原则上来说类别(分类)中只可以添加方法,不可以添加属性和成员变量(只是理论上不能添加属性,实际上是可以通过RunTime机制来添加的)。如下所示,类别也可以和类一样通过 @property 来添加属性,但是一般情况下不要这么做,因为如果直接和类一样来通过 @property 来添加属性的话,编译和运行都不会报错,但是一旦程序中有地方通过 self.deviceName 或 _deviceName 的形式来访问属性或变量就会报错,因为类别的结构体指针中没有属性列表,所以类别中用 @property 是不会生成带下划线的成员变量的,也不会生成setter/getter方法,所以编译或运行时因为找不到setter或getter方法而报错。
但在一些特殊情况下我们可以在类别中通过 @property 来添加属性后手动在.m文件中实现setter和getter方法。如下所示是一个UIView的分类,通过 @property 添加了一个x的属性,手动实现的setter/getter方法其实并不是直接设置的x或获取的x的值。或者可以通过runtime机制来添加属性。
需要注意的是,由于类别不能通过常规方法添加成员变量,所以下面这种写法是会报错的。
Category基本概念
1.什么是Category
-
Category有很多种翻译: 分类 \\ 类别 \\ 类目 (一般叫分类)
-
Category是OC特有的语法, 其他语言没有的语法
-
Category的作用
- 可以在不修改原来类的基础上, 为这个类扩充一些方法
- 一个庞大的类可以分模块开发
- 一个庞大的类可以由多个人来编写,更有利于团队合作
2.Category的格式
-
在.h文件中声明类别
- 1)新添加的方法必须写在 @interface 与 @end之间
- 2)ClassName 现有类的类名(要为哪个类扩展方法)
- 3)CategoryName 待声明的类别名称
- 4)NewMethod 新添加的方法
@interface ClassName (CategoryName) NewMethod; //在类别中添加方法 //不允许在类别中添加变量 @end
注意: 1)不允许在声明类别的时候定义变量
- 在.m文件中实现类别:
1)新方法的实现必须写在@ implementation与@end之间
2)ClassName 现有类的类名
3)CategoryName 待声明的类别名称
4)NewMethod 新添加的方法的实现
@implementation ClassName(CategoryName) NewMethod ... ... @end
- 使用Xcode创建分类
以上是关于OC中类别(Category)的属性的主要内容,如果未能解决你的问题,请参考以下文章
OC中的类别Category-协议Protocol-… - 韩俊强的博客 - 博客频道 - CSDN.NET