1. 我们说的oc是动态执行时语言是什么意思?

  答案:多态。

主要是将数据类型的确定由编译时,推迟到了执行时。

  这个问题事实上浅涉及到两个概念。执行时和多态。

  简单来说。执行时机制使我们直到执行时才去决定一个对象的类别,以及调用该类别对象指定方法。

  多态:不同对象以自己的方式响应同样的消息的能力叫做多态。意思就是如果生物类(life)都用有一个同样的方法-eat;

  那人类属于生物,猪也属于生物,都继承了life后。实现各自的eat,可是调用是我们仅仅需调用各自的eat方法。

  也就是不同的对象以自己的方式响应了同样的消息(响应了eat这个选择器)。

  因此也能够说,执行时机制是多态的基础?

~~~





  2. 通知和协议的不同之处?

  答案:协议有控制链(has-a)的关系,通知没有。

  简单来说,通知的话。它能够一对多。一条消息能够发送给多个消息接受者。

  代理按我们的理解,到不是直接说不能一对多,比方我们知道的明星经济代理人,非常多时候一个经济人负责好几个明星的事务。

  仅仅是对于不同明星间,代理的事物对象都是不一样的,一一相应。不可能说明天要处理A明星要一个公布会,代理人发出处理公布会的消息后。别称B的

  公布会了。可是通知就不一样。他仅仅关心发出通知。而不关心多少接收到感兴趣要处理。

  因此控制链(has-a从英语单词大致能够看出,单一拥有和可控制的相应关系。





  3. 关于多态性

  答案:多态,子类指针能够赋值给父类。

  这个题目事实上能够出到一切面向对象语言中,

  因此关于多态。继承和封装基本最好都有个自我意识的理解,也并不是一定要把书上资料上写的能背出来。

  最重要的是转化成自我理解。

  4. frame和bounds有什么不同?

  答案:frame指的是:该view在父view坐标系统中的位置和大小。(參照点是父亲的坐标系统)

  bounds指的是:该view在本身坐标系统中 的位置和大小。(參照点是本身坐标系统)







  5. NSOperation queue?

  答案:存放NSOperation的集合类。

  操作和操作队列。基本能够看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。

  网上部分资料提到一点是,尽管是queue。可是却并非带有队列的概念,放入的操作并非是依照严格的先进现出。

  这边又有个疑点是,对于队列来说。先进先出的概念是Afunc加入进队列,Bfunc紧跟着也进入队列,Afunc先运行这个是必定的,

  可是Bfunc是等Afunc全然操作完以后。B才開始启动而且运行。因此队列的概念离乱上有点违背了多线程处理这个概念。

  可是转念一想事实上能够參考银行的取票和叫号系统。

  因此对于A比B先排队取票可是B领先运行完操作。我们亦然能够感性觉得这还是一个队列。

  可是后来看到一票关于这操作队列话题的文章,当中有一句提到

  “由于两个操作提交的时间间隔非常近,线程池中的线程,谁先启动是不定的。”

  瞬间认为这个queue名字有点忽悠人了。还不如pool~

  综合一点,我们知道他能够比較大的用处在于能够帮组多线程编程就好了。





  6. 什么是延迟载入?

  答案:懒汉模式。仅仅在用到的时候才去初始化。

  也能够理解成延时载入。

  我认为最好也最简单的一个列子就是tableView中图片的载入显示了。

  一个延时载,避免内存过高,一个异步载入,避免线程阻塞。





  7. 是否在一个视图控制器中嵌入两个tableview控制器?

  答案:一个视图控制仅仅提供了一个View视图,理论上一个tableViewController也不能放吧。

  仅仅能说能够嵌入一个tableview视图。当然,题目本身也有歧义,假设不是我们定性思维觉得的UIViewController,

  而是宏观的表示视图控制者,那我们倒是能够把其看成一个视图控制者。它能够控制多个视图控制器。比方TabbarController

  那样的感觉。

  8. 一个tableView能否够关联两个不同的数据源?你会怎么处理?

  答案:首先我们从代码来看,数据源怎样关联上的。事实上是在数据源关联的代理方法里实现的。

  因此我们并不关心怎样去关联他,他怎么关联上,方法仅仅是让我返回依据自己的须要去设置如相关的数据源。

  因此。我认为能够设置多个数据源啊,可是有个问题是,你这是想干嘛呢?

想让列表怎样显示。不同的数据源分区块显示?





  9. 什么时候使用NSMutableArray,什么时候使用NSArray?

  答案:当数组在程序执行时。须要不断变化的,使用NSMutableArray,当数组在初始化后。便不再改变的。使用NSArray。须要指出的是,使用NSArray仅仅表明的是该数组在执行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。

NSArray是线程安全的。NSMutableArray不是线程安全的,多线程使用到NSMutableArray须要注意。





  10. 给出托付方法的实例,而且说出UITableVIew的Data Source方法

  答案:CocoaTouch框架中用到了大量托付。当中UITableViewDelegate就是托付机制的典型应用。是一个典型的使用托付来实现适配器模式,当中UITableViewDelegate协议是目标,tableview是适配器,实现UITableViewDelegate协议。并将自身设置为talbeview的delegate的对象,是被适配器,普通情况下该对象是UITableViewController。

  UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;





  11. 什么是简便构造方法?

  答案:简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat:
+ numberWithInt:

  Foundation下大部分类均有简便构造方法,我们能够通过简便构造方法,获得系统给我们创建好的对象。而且不须要手动释放。





  12. 什么是谓词?

  答案:谓词是通过NSPredicate,是通过给定的逻辑条件作为约束条件。完毕对数据的筛选。

  predicate = [NSPredicate predicateWithFormat:@"customerID == %d",n];

  a = [customers filteredArrayUsingPredicate:predicate];





  13. 谈谈对Block 的理解?

并写出一个使用Block运行UIVew动画?

  答案:Block是能够获取其它函数局部变量的匿名函数。其不但方便开发,而且能够大幅提高应用的运行效率(多核心CPU可直接处理Block指令)

  [UIView transitionWithView:self.view

  duration:0.2

  options:UIViewAnimationOptionTransitionFlipFromLeft

  animations:^{ [[blueViewController view] removeFromSuperview]; [[self view] insertSubview:yellowViewController.view
atIndex:0]; }

  completion:NULL];





  14. 多线程是什么

  多线程是个复杂的概念。按字面意思是同步完毕多项任务,提高了资源的使用效率,从硬件、操作系统、应用软件不同的角度去看。多线程被赋予不同的内涵。对于硬件,如今市面上多数的CPU都是多核的,多核的CPU运算多线程更为出色;从操作系统角度,是多任务,如今用的主流操作系统都是多任务的,能够一边听歌、一边写博客;对于应用来说。多线程能够让应用有更快的回应,能够在网络下载时,同一时候响应用户的触摸操作。在iOS应用中。对多线程最初的理解。就是并发,它的含义是原来先做烧水,再摘菜,再炒菜的工作,会变成烧水的同一时候去摘菜。最后去炒菜。

  15. iOS 中的多线程

  iOS中的多线程。是Cocoa框架下的多线程,通过Cocoa的封装,能够让我们更为方便的使用线程,做过C++的同学可能会对线程有很多其它的理解。比方线程的创立。信号量、共享变量有认识,Cocoa框架下会方便非常多,它对线程做了封装,有些封装,能够让我们创建的对象。本身便拥有线程,也就是线程的对象化抽象。从而降低我们的project,提供程序的健壮性。

  GCD是(Grand Central Dispatch)的缩写 ,从系统级别提供的一个易用地多线程类库。具有执行时的特点。能充分利用多核心硬件。GCD的API接口为C语言的函数,函数參数中多数有Block,关于Block的使用參看这里。为我们提供强大的“接口”,对于GCD的使用參见本文

  NSOperation与Queue

  NSOperation是一个抽象类。它封装了线程的细节实现,我们能够通过子类化该对象。加上NSQueue来同面向对象的思维,管理多线程程序。

详细可參看这里:一个基于NSOperation的多线程网络訪问的项目。

  NSThread

  NSThread是一个控制线程运行的对象,它不如NSOperation抽象,通过它我们能够方便的得到一个线程,并控制它。但NSThread的线程之间的并发控制,是须要我们自己来控制的,能够通过NSCondition实现。

  參看 iOS多线程编程之NSThread的使用

  其它多线程

  在Cocoa的框架下,通知、Timer和异步函数等都有使用多线程,(待补充).





  16. 在项目什么时候选择使用GCD,什么时候选择NSOperation?

  项目中使用NSOperation的长处是NSOperation是对线程的高度抽象。在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路。是具有面向对象的长处(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。

  项目中使用GCD的长处是GCD本身很easy、易用。对于不复杂的多线程操作,会节省代码量。而Block參数的使用。会是代码更为易读,建议在简单项目中使用。

  17. 什么是block

  对于闭包(block),有非常多定义,当中闭包就是可以读取其他函数内部变量的函数,这个定义即接近本质又较好理解。对于刚接触Block的同学,会认为有些绕。由于我们习惯写这种程序main(){ funA();}
funA(){funB();} funB(){…..}; 就是函数main调用函数A,函数A调用函数B… 函数们依次顺序运行,但现实中不全是这种。比如项目经理M,手下有3个程序猿A、B、C。当他给程序猿A安排实现功能F1时,他并不等着A完毕之后,再去安排B去实现F2,而是安排给A功能F1,B功能F2,C功能F3。然后可能去写技术文档,而当A遇到问题时,他会来找项目经理M,当B做完时,会通知M,这就是一个异步运行的样例。

在这种情形下,Block便可大显身手,由于在项目经理M。给A安排工作时,同一时候会告诉A若果遇到困难。怎样能找到他报告问题(比如打他手机号)。这就是项目经理M给A的一个回调接口。要回掉的操作。比方接到电话,百度查询后,返回网页内容给A。这就是一个Block,在M交待工作时。已经定义好,而且取得了F1的任务号(局部变量),却是在当A遇到问题时。才调用运行,跨函数在项目经理M查询百度,获得结果后回调该block。

 
  18. OC的垃圾回收机制?

  答案: OC2.0有Garbage collection,可是iOS平台不提供。

  一般我们了解的objective-c对于内存管理都是手动操作的,可是也有自己主动释放池。

  可是差了大部分资料,貌似不要和arc机制搞混就好了。

19. block 实现原理

  Objective-C是对C语言的扩展。block的实现是基于指针和函数指针。

  从计算语言的发展,最早的goto,高级语言的指针,到面向对象语言的block。从机器的思维,一步步接近人的思维。以方便开发者更为高效、直接的描写叙述出现实的逻辑(需求)。

  以下是两篇非常好的介绍block实现的博文

  iOS中block实现的探究

  谈Objective-C Block的实现

  3 block的使用

  使用实例

  cocoaTouch框架下动画效果的Block的调用

  使用typed声明block

  typedef void(^didFinishBlock) (NSObject *ob);

  这就声明了一个didFinishBlock类型的block,

  然后便可用

  @property (nonatomic,copy) didFinishBlock finishBlock;

  声明一个blokc对象,注意对象属性设置为copy,接到block 參数时,便会自己主动复制一份。

  __block是一种特殊类型,

  使用该keyword声明的局部变量。能够被block所改变,而且其在原函数中的值会被改变。

  4 常见系列面试题

  面试时,面试官会先问一些,是否了解block,是否使用过block。这些问题相当于开场白。往往是以下一系列问题的開始,所以一定要如实依据自己的情况回答。

  1 使用block和使用delegate完毕托付模式有什么长处?

  首先要了解什么是托付模式。托付模式在iOS中大量应用,其在设计模式中是适配器模式中的对象适配器。Objective-C中使用id类型指向一切对象,使托付模式更为简洁。

了解托付模式的细节:

  iOS设计模式—-托付模式

  使用block实现托付模式,其长处是回调的block代码块定义在托付对象函数内部。使代码更为紧凑;

  适配对象不再须要实现详细某个protocol,代码更为简洁。

  2 多线程与block

  GCD与Block

  使用 dispatch_async 系列方法,能够以指定的方式运行block

  GCD编程实例

  dispatch_async的完整定义

  void dispatch_async(

  dispatch_queue_t queue,

  dispatch_block_t block);

  功能:在指定的队列里提交一个异步运行的block,不堵塞当前线程

  通过queue来控制block运行的线程。主线程运行前文定义的 finishBlock对象

  dispatch_async(dispatch_get_main_queue(),^(void){finishBlock();});

【面试】iOS 开发面试题(二)的更多相关文章

  1. 100个iOS开发面试题汇总-王刚韧的技术博客

    100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...

  2. 100个iOS开发面试题汇总

    100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...

  3. 【面试】iOS 开发面试题(一)

      1. #import 跟#include 又什么差别,@class呢, #import<> 跟 #import""又什么差别? 答:#import是Objectiv ...

  4. iOS开发面试题整理(二)

    8 类别的作用?继承和类别在实现中有何区别? 答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改. 并且如果类别和原来类中的方法产生名称冲突,则类别 ...

  5. 百度ios 开发面试题

    百度移动云可穿戴部门的面试经历,面试官都非常热情友好,一上来到弄的我挺不好意思的.下面记录一下自己的面试过程,因为我真的没啥面试经验,需要总结下. 1面 Objective C runtime lib ...

  6. iOS开发面试题整理

    前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github

  7. iOS开发面试题(中级)

    //想面试的童鞋们来看看自己会多少, 老鸟可以无视直接绕过...1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?与Ex ...

  8. iOS开发面试题整理 (三)

    1. 风格纠错题 修改完的代码: typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : ...

  9. C#版 - 小红书后台开发面试题: 二维数组中的查找

    二维数组中的查找 热度指数:24274 时间限制:1秒 空间限制:32768K 本题知识点: 查找 ​ 在线提交网址: http://www.nowcoder.com/practice/abc3fe2 ...

随机推荐

  1. android获取屏幕长宽的方法

    package com.kale.imageview02; import android.annotation.SuppressLint; import android.app.Activity; i ...

  2. SSO单点登录之Asp.Net实现示例

    一.什么是单点登录SSO(Single Sign-On) SSO是一种统一 认知 和授权机制,指访问用同一服务器不同应用中的受保护资源的同一用户,只需登录一次,即通过一个应用中的安全验证 后,再访问其 ...

  3. OSAL工作机制分析

    协议栈代码main()函数分析 ZMain文件->ZMain.c->main()  在这里我们重点了解osal_start_system()函数 int main( void ) { // ...

  4. 在SharePoint Server 2010中更改“我的网站”

    在安装SharePoint Server 2010的时候,创建的第一个站点是一个“NetBIOS名称”的网站,而这个时候,“我的网站”(或称“个人网站”),也是基于此NetBIOS名称的,例如,如果你 ...

  5. 算法 递归 迭代 动态规划 斐波那契数列 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. CentOS 6和CentOS 7防火墙的关闭

    CentOS6.5查看防火墙的状态: 1 [linuxidc@localhost ~]$service iptable status 显示结果: 1 2 3 4 5 [linuxidc@localho ...

  7. Spark:java api实现word count统计

    方案一:使用reduceByKey 数据word.txt 张三 李四 王五 李四 王五 李四 王五 李四 王五 王五 李四 李四 李四 李四 李四 代码: import org.apache.spar ...

  8. (文档)流媒体资源 Streaming Assets

    Most assets in Unity are combined into the project when it is built. However, it is sometimes useful ...

  9. CHtmlEditCtrl(1) : Use CHtmlEditCtrl to Create a Simple HTML Editor

    I needed a lightweight HTML editor to generate "rich text" emails, so I decided to explore ...

  10. Is there anyway to discover which ip addresses are connected to the db?

    From mongo shell run db.currentOp() to show all active connections or db.currentOp(true) to show all ...