新闻中心> 文章详情

南京iOS开发培训分享iOS程序员面试绝对会遇到的问题(下)

2016年05月17日

  上面南京万和iOS开发培训分享了iOS程序员面试绝对会遇到的问题(上),今天南京万和iOS开发培训继续分享汇总了面试精华题(下),不仅为了面试,也是一次学习!


  #include与#import的区别、#import 与@class 的区别


  ·#include 和#import其效果相同,都是查询类中定义的行为(方法);


  ·#import不会引起交叉编译,确保头文件只会被导入一次;


  ·@class 的表明,只定 义了类的名称,而具体类的行为是未知的,一般用于.h 文件;


  ·@class 比#import 编译效率更高。


  ·此外@class 和#import 的主要区别在于解决引用死锁的问题。有疑惑?咨询南京万和iOS开发培训


  @public、@protected、@private 它们的含义与作用


  ·@public:对象的实例变量的作用域在任意地方都可以被访问 ;


  ·@protected:对象的实例变量作用域在本类和子类都可以被访问 ;


  ·@private:实例变量的作用域只能在本类(自身)中访问 .


  解释 id 类型


  任意类型对象,程序运行时才决定对象的类型。更多详情,咨询南京万和iOS开发培训


  switch 语句 if 语句区别与联系


  均表示条件的判断,switch语句表达式只能处理的是整型、字符型和枚举类型,而选择流程语句则没有这样的限制。switch语句比选择流程控制语句效率更高。


  CoreData的介绍:


  ·CoreData是面向对象的API,CoreData是iOS中非常重要的一项技术,几乎在所有编写的程序中,CoreData都作为数据存储的基础。


  ·CoreData是苹果官方提供的一套框架,用来解决与对象声明周期管理、对象关系管理和持久化等方面相关的问题。


  ·大多数情况下,我们引用CoreData作为持久化数据的解决方案,并利用它作为持久化数据映射为内存对象。提供的是对象-关系映射功能,也就是说,CoreData可以将Objective-C对象转换成数据,保存到SQL中,然后将保存后的数据还原成OC对象。


  CoreData的特征:


  ·通过CoreData管理应用程序的数据模型,可以极大程度减少需要编写的代码数量。


  ·将对象数据存储在SQLite数据库已获得性能优化。


  ·提供NSFetchResultsController类用于管理表视图的数据,即将Core Data的持久化存储在表视图中,并对这些数据进行管理:增删查改。


  ·管理undo/redo操纵;


  ·检查托管对象的属性值是否正确。有疑惑?咨询南京万和iOS开发培训


  Core Data的6成员对象


  ·1.NSManageObject:被管理的数据记录Managed Object Model是描述应用程序的数据模型,这个模型包含实体(Entity)、特性(Property)、读取请求(Fetch Request)等。


  ·2.NSManageObjectContext:管理对象上下文,持久性存储模型对象,参与数据对象进行各种操作的全过程,并监测数据对象的变化,以提供对undo/redo的支持及更新绑定到数据的UI。


  ·3.NSPersistentStoreCoordinator:连接数据库的Persistent Store Coordinator相当于数据文件管理器,处理底层的对数据文件的读取和写入,一般我们与这个没有交集。


  ·4.NSManagedObjectModel:被管理的数据模型、数据结构。


  ·5.NSFetchRequest:数据请求;


  ·6.NSEntityDescription:表格实体结构,还需知道.xcdatamodel文件编译后为.momd或者.mom文件。


  Core Data的功能


  ·对于KVC和KVO完整且自动化的支持,除了为属性整合KVO和KVC访问方法外,还整合了适当的集合访问方法来处理多值关系;更多详情,咨询南京万和iOS开发培训


  ·自动验证属性(property)值;


  ·支持跟踪修改和撤销操作;


  ·关系维护,Core Data管理数据的关系传播,包括维护对象间的一致性;


  ·在内存上和界面上分组、过滤、组织数据;


  ·自动支持对象存储在外部数据仓库的功能;   


  ·创建复杂请求:无需动手写SQL语句,在获取请求(fetch request)中关联NSPredicate。NSPreadicate支持基本功能、相关子查询和其他高级的SQL特性。它支持正确的Unicode编码、区域感知查询、排序和正则表达式;


  ·延迟操作:Core Data使用懒加载(lazy loading)方式减少内存负载,支持部分实体化延迟加载和复制对象的数据共享机制;


  ·合并策略:Core Data内置版本跟踪和乐观锁(optimistic locking)来支持多用户写入冲突的解决,其中,乐观锁就是对数据冲突进行检测,若冲突就返回冲突的信息;


  ·数据迁移:Core Data的Schema Migration工具可以简化应对数据库结构变化的任务,在某些情况允许你执行高效率的数据库原地迁移工作;


  ·可选择针对程序Controller层的集成,来支持UI的显示同步Core Data在IPhone OS之上,提供NSFetchedResultsController对象来做相关工作,在Mac OS X上我们用Cocoa提供的绑定(Binding)机制来完成的。


  自动释放池工作原理


  ·自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁时,将会向池中所有对象发送一条release消息,释放对象。


  ·[pool release]、 [pool drain]表示的是池本身不会销毁,而是池子中的临时对象都被发送release,从而将对象销毁。有疑惑?咨询南京万和iOS开发培训


  在某个方法中 self.name = _name,name = _name 它们有区别吗,为什么?


  ·前者是存在内存管理的setter方法赋值,它会对_name对象进行保留或者拷贝操作


  ·后者是普通赋值


  ·一般来说,在对象的方法里成员变量和方法都是可以访问的,我们通常会重写Setter方法来执行某些额外的工作。比如说,外部传一个模型过来,那么我会直接重写Setter方法,当模型传过来时,也就是意味着数据发生了变化,那么视图也需要更新显示,则在赋值新模型的同时也去刷新UI。


  解释self = [super init]方法


  ·容错处理,当父类初始化失败,会返回一个nil,表示初始化失败。由于继承的关系,子类是需要拥有父类的实例和行为,因此,我们必须先初始化父类,然后再初始化子类


  定义属性时,什么时候用 assign、retain、copy 以及它们的之间的区别


  ·assign:普通赋值,一般常用于基本数据类型,常见委托设计模式, 以此来防止循环引用。(我们称之为弱引用).


  ·retain:保留计数,获得到了对象的所有权,引用计数在原有基础上加1.


  ·copy:一般认为,是在内存中重新开辟了一个新的内存空间,用来 存储新的对象,和原来的对象是两个不同的地址,引用计数分别为1。但是当copy对象为不可变对象时,那么copy 的作用相当于retain。因为,这样可以节约内存空间


  线程与进程的区别和联系?


  ·一个程序至少要有进城,一个进程至少要有一个线程。更多详情,咨询南京万和iOS开发培训


  ·进程:资源分配的最小独立单元,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.


  ·线程:进程下的一个分支,是进程的实体,是CPU调度和分派的基本单元,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。


  ·进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。


  ·进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。


  ·但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。


  TCP连接的三次握手


  ·第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;


  ·第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN+RECV状态;


  ·第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次状态。有疑惑?咨询南京万和iOS开发培训


  如何进行真机调试


  ·1.首先需要用钥匙串创建一个钥匙(key);


  ·2.将钥匙串上传到官网,获取iOS Development证书;


  ·3.创建App ID即我们应用程序中的Boundle ID;


  ·4.添加Device ID即UDID;


  ·5.通过勾选前面所创建的证书:App ID、Device ID;


  ·6.生成mobileprovision文件;


  ·7.先决条件:申请开发者账号 99美刀   有疑惑?咨询南京万和iOS开发培训


  APP发布的上架流程


  ·1.登录应用发布网站添加应用信息;


  ·2.下载安装发布证书;


  ·3.选择发布证书,使用Archive编译发布包,用Xcode将代码(发布包)上传到服务器;


  ·4.等待审核通过;


  ·5.生成IPA:菜单栏->Product->Archive.


  通过本文iOS面试题的汇总和解析,南京万和iOS开发培训希望能帮助iOS开发者顺利找到理想的工作。


  相关阅读:南京iOS开发培训分享iOS程序员面试绝对会遇到的问题(上)

上一篇下一篇
按时发顺丰

技术交流群

Java大数据交流群560819979    加入
Python技术交流群595083299    加入
Oracle技术交流群595119011    加入
Web前端技术交流群604697610    加入
Huawei技术交流群482919361    加入
Redhat技术交流群587875348    加入
UI设计技术交流群511649801    加入
Cisco技术交流群596886705    加入
IT运维技术交流群605888381    加入