首页 > 试题广场 >

下面对category描述不正确的是()

[单选题]
下面对category描述不正确的是()
  • category可以添加新的方法
  • category可以删除修改之前的方法
  • 将类的实现分散到多个不同文件或多个不同框架中
  • 创建对私有方法的前向引用
推荐
B
类别是一种为现有的类添加新方法的方式。利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inheritance)更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可以为任何已经存在的 class 添加方法,包括那些没有源代码的类(如某些框架类),但不能删除修改之前的方法

类别主要有3个作用:

(1)可以将类的实现分散 到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。

(2)创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告

(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。

编辑于 2015-01-30 10:22:53 回复(3)

前向引用:Cocoa没有任何真正的私有方法。只要知道对象支持的某个方法的名称,即使该对象所在的类的接口中没有该方法的声明,你也可以调用该方法。不过这么做编译器会报错,但是只要新建一个该类的类别,在类别.h文件中写上原始类该方法的声明,类别.m文件中什么也不写,就可以正常调用私有方法了。这就是传说中的私有方法前向引用。 所以说cocoa没有真正的私有方法1。【这个答案的网址:http://blog.csdn.net/xubinlxb/article/details/52077877 】

直白点说就是 Runtime 的特性,反正通过 SEL 能查找到 IMP 就可以了。

发表于 2017-09-08 11:21:25 回复(1)
还是不懂这个前向引用?
发表于 2017-05-18 13:43:39 回复(1)
category是在不修改原来类的内容的基础上,为类增加一些方法。
发表于 2017-03-04 15:29:36 回复(0)
不懂D为什么对?
发表于 2016-10-15 14:00:35 回复(1)
(3)向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。


不懂
发表于 2016-03-26 13:26:47 回复(0)
只可添加或重写方法,不能删除方法,而且不建议重写。重写方法建议使用类继承。
发表于 2016-03-05 14:25:38 回复(0)
BD不解释

发表于 2015-07-30 18:23:16 回复(1)
分类应该是只可以添加新的属性或者方法。
发表于 2015-07-11 16:44:53 回复(3)
亲测可信。。。
发表于 2015-03-30 14:56:15 回复(0)
[-] B D
发表于 2015-01-14 17:58:25 回复(0)