面试题1Objectc的类可以多继承么?category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Objectc的类不可以多重继承,可以用伪继承和protocol委托来代替;可以实现多个接口,通过实现多个接口就可以完成C的多重继承,Category是类别,一般用分类比较好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。伪继承必须覆盖两个方法,即methodSig
atureForSelector和forwardI
vocatio
。methodSig
atureForSelector的作用在于为另一个类实现的消息创建一个有效的方法签名。forwardI
vocatio
将选择器转发给一个真正实现了该消息的对象2类别的作用?继承和类别在实现中有何区别?答:category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:1将类的实现分散到多个不同文件或多个不同框架中。2创建对私有方法的前向引用。3向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。非正式协议是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法,这样用来实现委托,我们可以使用选择器来判断该非正式协议中是否有这个方法。正式协议是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法。3类别和类扩展的区别?答:1