北京pk10高手赌法长期 北京pk10计划在线计划 北京pk10赛车开奖结果 北京pk10是正规彩票吗 北京pk10赛车开奖结果 北京pk10玩法 北京pk10怎么研究走势 北京pk10最稳办法 北京pk10有几种技巧 北京pk10开奖记录 北京pk10是正规彩票吗 北京pk拾 北京pk10开奖直播 北京pk10怎么研究走势 北京pk10计划在线计划 北京pk10是国家开的吗 北京pk10是国家彩票吗 北京pk10怎么研究走势 北京pk10七码全年可用 北京pk10高手赌法长期 北京pk10绝密方法 北京pk10高手赌法长期 北京pk10是国家彩票吗 北京pk10是正规的吗 北京pk10玩法 北京pk10是正规彩票吗 北京pk10骗局全过程 北京pk10是国家彩票吗 北京pk10是国家彩票吗 北京pk10是正规彩票吗 北京pk10是正规彩票吗 北京pk10怎么研究走势 北京pk10最稳办法 北京pk10最稳办法 北京pk10计划在线计划 北京pk10有几种技巧 北京pk10高手技术分享 北京pk10彩票官网 北京pk10高手技术分享 北京pk10是正规的吗 北京pk10开奖记录 北京pk10计划50期连中 北京pk10开奖 北京pk10最稳办法 北京pk10是国家彩票吗 北京pk10是国家开的吗 北京pk10最稳办法

ios面试题及答案2018

面试技巧 时间:2018-01-23 我要投稿
¡¾www.kc7h.com - 面试技巧¡¿

¡¡¡¡对于iOS技术员来说£¬面试前的准备很有必要£¬那么你了解2017年的iOS面试题了吗?以下是阳光大学生网小编帮你们整理的2018ios面试题及答案£¬一起来学习啦¡£

¡¡¡¡2018ios面试题及答案(一)

¡¡¡¡1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方?#25509;?#32487;承好还是分类好?为什么?

¡¡¡¡答£º Object-c的类不可以多重继承;可以实现多个接口£¬通过实现多个接口可以完成C++的多重继承;Category是类别£¬一般情况用分类好£¬用Category去重写类的方法£¬仅对本Category有效£¬不会影响到其他类与原有类的关系¡£没有£¬cocoa 中所有的类都是NSObject 的子类£¬多继承在这里是用protocol 委?#20889;?#29702;来实现的
 £¬ood的多态特性在obj-c中通过委托来实现¡£

¡¡¡¡2. #import 跟#include 又什么区别£¬@class呢, #import<> 跟 #import””又什么区别?

¡¡¡¡答£º#import是Objective-C导入头文件的关键字£¬#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次£¬不会重复导入£¬相当于#include和#pragma once;@class告诉编译器某个类的声明£¬当执行时£¬才去查看类的实现文件£¬可以解决头文件的相互包含;#import<>用来包含系统的头文件£¬#import””用来包含用户头文件¡£

¡¡¡¡3. 属性readwrite£¬readonly£¬assign£¬retain£¬copy£¬nonatomic 各是什么作用£¬在那种情况下用?

¡¡¡¡01. readwrite 是可读可写特性;需要生成getter方法和setter方法时

¡¡¡¡02. readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

¡¡¡¡03. assign 是赋值特性£¬setter方法将传入参数赋值给实例变量;仅设置变量时;

¡¡¡¡04. retain 表示持有特性£¬setter方法将传入参数先保留£¬再赋值£¬传入参数的retaincount会+1;

¡¡¡¡05. copy 表示赋值特性£¬setter方法将传入对象复制一份;需要完全一份新的变量时¡£

¡¡¡¡06. nonatomic 非原子操作£¬决定编译器生成的setter getter是否是原子操作£¬atomic表示多线程安全£¬一般使用nonatomic

¡¡¡¡4.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?

¡¡¡¡编译时是NSString的类型;运行时是NSData类型的对象

¡¡¡¡5.常见的object-c的数据类型有那些£¬ 和C的基本数据类型有什么区别?如£ºNSInteger和int

¡¡¡¡object-c的数据类型有NSString£¬NSNumber£¬NSArray£¬NSMutableArray£¬NSData等等£¬这些都是class£¬创建后便是对象£¬而C语言的基本数据类型int£¬只是一定字节的内存空间£¬用于存放数值;NSInteger是基本数据类型£¬并不是NSNumber的子类£¬当然也不是NSObject的子类¡£NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger)£¬它的区别在于£¬NSInteger会根据系统是32位还是64位来决定是本身是int还是Long¡£

¡¡¡¡6.id 声明的对象有什么特性?

¡¡¡¡Id 声明的对象具有运行时的特性£¬即可以指向?#25105;?#31867;型的objcetive-c的对象;

¡¡¡¡2018ios面试题及答案(二)

¡¡¡¡1. 原子(atomic)跟非原子(non-atomic)属性有什么区别?

¡¡¡¡01. atomic提供多线程安全¡£是防止在写未完成的时候被另外一个线程读取£¬造成数据错误

¡¡¡¡02. non-atomic:在自己管理内存的环境中£¬解析的访问器保留并自动?#22836;?#36820;回的值£¬如果指定了 nonatomic £¬那么访问器只是简单地返回这个值¡£

¡¡¡¡2. 看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?

¡¡¡¡NSMutableArray* ary = [[NSMutableArray array] retain];

¡¡¡¡NSString *str = [NSString stringWithFormat:@"test"];

¡¡¡¡[strretain];

¡¡¡¡[aryaddObject:str];

¡¡¡¡NSLog(@”%@%d”,str,[str retainCount]);

¡¡¡¡[strretain];

¡¡¡¡[strrelease];

¡¡¡¡[strrelease];

¡¡¡¡NSLog(@”%@%d”,str,[str retainCount]);

¡¡¡¡[aryremoveAllObjects];

¡¡¡¡NSLog(@”%@%d”,str,[str retainCount]);

¡¡¡¡str的retainCount创建+1£¬retain+1£¬加入数组自动+1 3

¡¡¡¡retain+1£¬release-1£¬release-1 2

¡¡¡¡数组?#22659;?#25152;有对象£¬所有数组内的对象自动-1 1

¡¡¡¡3. 类别的作用?继承和类别在实现中有何区别?

¡¡¡¡答案£ºcategory 可以在不获悉£¬不改变原来代码的情况下往里面添?#26377;?#30340;方法£¬只能添加£¬不能?#22659;?#20462;改¡£

¡¡¡¡并且如果类别和原来类中的方法产生名称冲突£¬则类别将覆盖原来的方法£¬因为类别具有更高的优先级¡£

¡¡¡¡类别主要有3个作用£º

¡¡¡¡(1)将类的实现分散到多个不同文件或多个不同框架?#23567;?/p>

¡¡¡¡(2)创建对私有方法的前向引用¡£

¡¡¡¡(3)向对象添加非正式协议¡£

¡¡¡¡继承可以增加£¬修改或者?#22659;?#26041;法£¬并且可以增加属性¡£

¡¡¡¡4 类别和类扩展的区别¡£

¡¡¡¡答案£ºcategory和extensions的不同在于 后者可以添加属性¡£另外后者添加的方法是必须要实现的¡£

¡¡¡¡extensions可以认为是一个私有的Category¡£

¡¡¡¡2018ios面试题及答案(三)

¡¡¡¡1. 内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象 需要手动?#22836;?在和property结合的时候怎样有效的避免内存泄露?

¡¡¡¡谁申请£¬谁?#22836;?/p>

¡¡¡¡遵循Cocoa Touch的使用原则;

¡¡¡¡内存管理主要要避免“过早?#22836;?rdquo;和“内存泄漏”£¬对于“过早?#22836;?rdquo;需要注意@property设置特性时£¬一定要用对特性关键字£¬对于“内存泄漏”£¬一定要申请了要负责?#22836;Å£?#35201;细心¡£

¡¡¡¡关键字alloc 或new 生成的对象需要手动?#22836;?

¡¡¡¡设置正确的property属性£¬对于retain需要在合适的地方?#22836;Å£?/p>

¡¡¡¡2.如何对iOS设备进行性能测试?

¡¡¡¡Profile-> Instruments ->Time Profiler

¡¡¡¡3. Object C?#20889;?#24314;线程的方法是什么?如果在主线程中执?#20889;?#30721;£¬方法是什么?如果想延时执?#20889;?#30721;¡¢方法又是什么?

¡¡¡¡线程创建有三种方法£º使用NSThread创建¡¢使用GCD的dispatch¡¢使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执?#20889;?#30721;£¬方法是performSelectorOnMainThread£¬如果想延时执?#20889;?#30721;可以用performSelector:onThread:withObject:waitUntilDone:

¡¡¡¡GCD从语言¡¢运行时库¡¢系统扩展等三个方面给让使用者更充分的操作多核设备£¬同时它基于队列的概念£¬因为每一个CPU core单位时间(时间片)内只能运行某个队列的某个task£¬并通过优先级¡¢FIFO等策略进行task的切换运?#23567;?/p>

¡¡¡¡GCD共提供三种队?#34892;?#24335;£º

¡¡¡¡01. main£¬即主线程£¬iOS的UI绘制¡¢交互响应都要在此线程?#29616;?#34892;

¡¡¡¡02. concurrent£¬并发线程队列£¬task的进出队列£¬都遵循FIFO策略£¬但队列中的task‘看起来’是并发执行的完成时间却可能是以?#25105;?#30340;?#25215;?#32467;束¡£很容易理解£¬因为每个task的执行时间长短通常不一样¡£

¡¡¡¡03. serial£¬串行队列£¬在此队列中的task£¬one by one的执行£¬?#32454;?#36981;守FIFO即£¬我们要执行一个block(task)

¡¡¡¡4.描述一下iOS SDK中如何实现MVC的开发模式

¡¡¡¡MVC是模型¡¢试图¡¢控制开发模式£¬对于iOS SDK£¬所有的View都是视图层的£¬它应该独立于模型层£¬由视图控制层来控制¡£所有的用户数据都是模型层£¬它应该独立于视图¡£所有的ViewController都是控制层£¬由它负责控制视图£¬访问模型数据¡£

¡¡¡¡5 浅复制和深复制的区别?

¡¡¡¡答案£º浅层复制£º只复制指向对象的指针£¬而不复制引用对象本身¡£

¡¡¡¡深层复制£º复制引用对象本身¡£

¡¡¡¡意思就是说我有个A对象£¬复制一份后得到A_copy对象后£¬对于浅复制来说£¬A和A_copy指向的是同一个内存?#35797;´£?#22797;制的只?#36824;?#26159;是一个指针£¬对象本身?#35797;?还是只有一份£¬那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改£¬这其实违背了我们复制拷贝的一个思想¡£深复制就好理解了,内存?#20889;?#22312;了 两份独立对象本身¡£

¡¡¡¡用网上一哥们通俗的话将就是£º

¡¡¡¡浅复制好比你和你的影子£¬你完蛋£¬你的影子也完蛋

¡¡¡¡深复制好比你和你的克隆人£¬你完蛋£¬你的克隆人还活着¡£

¡¡¡¡
看了“2018ios面试题及答案”的人还看了£º

1.ios高级面试题及答案

2.2017年公务员经典面试题及参考答案

3.2017php面试题及答案

4.java面试题2017及答案

5.2017java面试题和答案

本文来源£ºs("content_bottom");
?#35753;?#25991;章
±±¾©pk10¿ª½±¼Ç¼