iOS面试题及答案.docx

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
iOS面试题及答案精要

面试题Object-c的类可以多继承么?category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承,可以用伪继承和@protocol委托来代替;可以实现多个接口,通过实现多个接口就可以完成C++的多重继承,Category是类别,一般用分类比较好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。伪继承必须覆盖两个方法,即methodSignatureForSelector: 和 forwardInvocation:。methodSignatureForSelector:的作用在于为另一个类实现的消息创建一个有效的方法签名。forwardInvocation:将选择器转发给一个真正实现了该消息的对象.类别的作用?继承和类别在实现中有何区别?答:category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。?/* 非正式协议:是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法,这样用来实现委托, 我们可以使用选择器来判断该非正式协议中是否有这个方法。?正式协议:是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法。 */类别和类扩展的区别?答:1.类别比子类方便多了,因为对已添加category的类,使用到它或者它的子类的地方,category都会起作用;“子类”的话,则需要在使用的每个地方,创建子类对象2.类别只能添加方法,不能加属性、变量3.类别一般是对框架提供类的扩展(没有源码,不能修改)4.类别一般是在不想生成一个新的子类的情况下,比如对NSArray的扩展“扩展”则相当于定义一个子类,在里面添加属性和方法属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?什么情况使用weak关键字,相比assign有什么不同?答:1?readwrite:同时生成get方法和set方法的声明和实现2?readonly:只生成get方法的声明和实现3?assign:set方法的实现是直接赋值,用于基本数据类型4?retain:set方法的实现是release旧值,retain新值,用于OC对象类型5?copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型6?nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)注意点:(nonatomic)非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。(atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。写一个setter方法用于完成@property(nonatomic,retain)NSString * name,写一个setter方法用于完成@property(nonatomic,copy)NSString * name;答:-?(void)setName:(NSString?*)?str??{??????[str?retain];??????[name?release];??????name?=?str;??}??-?(void)setName:(NSString?*)str??{??????id?t?=?[str?copy];??????[name?release];??????name?=?t;??}??看下面的程序,第一个NSLog会输出什么?这时str的retaincount是多少?第二个和第三个呢?为什么?NSMutableArray * ary = [[NSMutableArray array] retain];NSString * str = [NSString stringWithFormat:@”test”];[str retain];[ary a

文档评论(0)

1520520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档