iOS类别(category)不能添加成员变量但是可以添加属性的问题

Posted Ning静致远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS类别(category)不能添加成员变量但是可以添加属性的问题相关的知识,希望对你有一定的参考价值。

类别不需要介绍了把,网上一大堆(利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没有源代码的类)。

这篇博客主要想讨论关于类别不能添加成员变量的问题。

图中是我创建的一个UIImageView的类别,名称为Network,我在给类别添加实例变量view1的时候报错了(实例变量是成员变量的一种,实例变量应该是由类定义的变量),意思是实例变量不能被放在类别中。 但是localImage是我创建的一个属性,没有报错。但是这个localImage在 .m文件中@implement UIImageView(Network)中是无法使用的,只能在@implement UIImageView里用。 

图1:

技术分享

上面那段话可能听不懂,为什么不能用呢?看看下面的图片(图2), 我在controller里调用了这个方法,但是打印self.localImage的时候报错了,说"localImage"这个属性不在 UIImageView类型的对象上, 有点难理解。。但是如果把下面的set/get方法取消注释再跑一遍发现看看(图3)发现self.localImage = nil, 说明类别不会自动帮属性生成get/set方法。(_localImage无法使用,说明声明属性的时候没有生成_开头的成员变量)

图2:

技术分享

图3:

技术分享

图4:直接报错了,所以说添加的属性不能在@implementaion UIImageView(Network) 中使用

技术分享

以上是关于iOS类别(category)不能添加成员变量但是可以添加属性的问题的主要内容,如果未能解决你的问题,请参考以下文章

IOS(六) 分类Category

OC中类别(Category)的属性

iOS之分类(category)

OC-category 为什么不能添加成员变量

ios 分类

iOS基础知识之类别