Category能实现上面的需求,当然也有使用Category是需要注意的问题: 1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。 2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。 3、和普通接口有...
1)、首先编译器生成了实例方法列表OBJC$_CATEGORY_INSTANCE_METHODSMyClass$_MyAddition和属性列表OBJC$_PROP_LISTMyClass$_MyAddition,两者的命名都遵循了公共前缀+类名+category名字的命名方式,而且实例方法列表里面填充的正是我们在MyAddition这个category里面写的方法printName,而属性列表里面填充的也正是我们在MyAddi...
1、类别(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似。 我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义。 下面就是定...
就category和extension的区别来看,我们可以推导出一个明显的事实,extension可以添加实例变量,而category是无法添加实例变量的(因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的)。 3、挑灯细览-category真面目 我们知道,所有的OC类和对象,在runtime层都是用stru...
我们知道,所有的OC类和对象,在runtime层都是用struct表示的,category也不例外,在runtime层,category用结构体category_t(在objc-runtime-new.h中可以找到此定义),它包含了: 1)、类的名字(name) 2)、类(cls) 3)、category中所有给类添加的实例方法的列表(instanceMethods) ...
Category是Objective-C 2.0之后添加的语言特性,Category主要作用是为已经存在的类添加新行为(属性、方法、协议)。 Category 与 Extension Extension(扩展)被称为匿名Category(分类),Extension 是在编译阶段决定,是类的一部分,它伴随类的产生而产生,亦随之一起消亡。Extension 一般用来隐藏类的私有信息,你必须有一个类的...
就category和extension的区别来看,我们可以推导出一个明显的事实,extension可以添加实例变量,而category是无法添加实例变量的(因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的)。 3、挑灯细览-category真面目 ...
在Xcode中新建CategoryTest类,在新建类中声明两个实例变量,在实现类中重写description方法,打印输出两个实例变量的值 代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //CategoryTest.h #import <Foundation/Foundation.h> @interface CategoryTest : NSObject //定义两个私有的...
总结:继承、分类(Category、extension)、协议(protocol) 一、继承: (1)特点:继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码,不仅简化了代码,而且也提高了代码的复用性。 (2)过程:当子类需要的方法和属性在父类中找不到时,子类可以添加自己必要的方法和属性,目的是对功能...
Objective-C类别(category)和扩展(Extension)Objective-C类别(category)和扩展(Extension)1、类别(category)使⽤Object-C中的分类,是⼀种编译时的⼿段,允许我们通过给⼀个类添加⽅法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使...