iOS基本面试题

1、synthesize和dynamic有什么作用?

  • synthesize:
    是系统自动生成getter和setter属性声明;@synthesize的意思是,除非开发人员已经做了,否则由编译器生成相应的代码,以满足属性声明;
  • dynamic:
    是开发者自已提供相应的属性声明,@dynamic意思是由开发人员提供相应的代码:对于只读属性需要提供getter,对于读写属性需要提供 setter 和getter。

2、#define和const变量有什么区别?

define在预处理阶段进行简单的替换,const在编译阶段使用
define不做类型检查,仅仅展开替换,const有数据类型,会执行类型检查
define不分配内存,仅仅展开替换,const会分配内存
define不能调试,const可以调试
define定义的常量在替换后运行过程中会不断地占用内存,而const定义的常量存储在数据段,只有一份copy,效率更高
definde可以定义一些简单的函数,const不可以

3、请分别说明@public、@protected、@private的含义与作用?

  • @public:对象的实例变量的作用域在任意地方都可以被访问 ;
  • @protected:对象的实例变量作用域在本类和子类都可以被访问 ;
  • @private:实例变量的作用域只能在本类(自身)中访问 .

4、为什么block属性要使用copy来修饰?

因为不用copy修饰的访问外部变量的block,只在他所在的函数被调用的那一瞬间可以使用。之后就消失了。
如果是堆中的block,也就是copy修饰的block。他的生命
周期就是随着对象的销毁而结束的。只要对象不销毁,我们就可以调用的到在堆中的block。所以使用copy修饰block目的是将block保存到堆里面。

5、属性可以拥有的特质可以分为四类:

  • 原子性(atomic)、非原子性(nonatomic)
  • 读写权限(readwrite、readonly)
  • 内存管理语义(assgin,strong,weak,copy)
  • 方法名getter=<name>、setter=<name>

6、属性的作用是什么?

主要的作用就在于封装对象中的数据。

7、属性的本质是什么?

属性的本质是实例变量与存取方法的结合。
@property = ivar + getter + setter

8、用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

  • 因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本.
  • 如果我们使用是 strong ,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性.

9、类别和类延展的区别?

category和extensions的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。
extensions可以认为是一个私有的Category。

10、如何让 Category 支持属性?

  • category中不能添加属性,是因为可以声明属性,添加到该类的属性列表并声明getter和setter方法,但是并不会生成对应的成员变量,所以不能添加属性。UIView的分类是getter和setter方法调用了本类的其他属性。
  • 如果要category支持属性,就只能使用运行时objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象。

11、代理的作用是什么?

代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。

12、请谈谈堆和栈的区别

  • 栈区(stack)由编译器自动分配释放 ,存放方法(函数)的参数值, 局部变量的值等,栈是向低地址扩展的数据结构,是一块连续的内存的区域。即栈顶的地址和栈的最大容量是系统预先规定好的。
  • 堆区(heap)一般由程序员分配释放, 若程序员不释放,程序结束时由OS回收,向高地址扩展的数据结构,是不连续的内存区域,从而堆获得的空间比较灵活。

13、请你谈谈Objective-c的内存管理机制?

Objective-c中的对象都是基于引用计数来管理生命周期,简单的来说就是,我们需要持有一个对象时,调用retain让它的引用计数+1,不需要的这个对象的时候,调用release让它的引用计数-1。当一个对象的引用计数为0时,这个对象就会被自动销毁。

14、请你谈谈TCP的三次握手。

  • 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN+RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次状态。

15、您一般是怎么用 Instruments 的?

  • Time Profiler:性能分析
  • Zombies:检查是否访问了僵尸对象,但是这个工具只能从上往下检查,不智能
  • Allocations:用来检查内存,写算法的那批人也用这个来检查
  • Leaks:检查内存,看是否有内存泄露

16、有哪些常见的crash场景?

  • 访问了野指针
  • 访问了僵尸对象
  • 访问了不存在的方法
  • 数组下标越界
  • 在定时器下一次回调前将定时器提前释放

17、熟悉 CocoaPods 么?能大概讲一下工作原理么?

CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。

18、UIView和CALayer的区别和联系?

  • 区别:
    UIView和CALayer最大的区别是UIView可以接受并处理触摸事件,而CALayer不可以。
  • 联系:
    每个UIView内部都有一个CALayer在背后提供内容的绘制和显示,并且UIView的尺寸样式都由内部的CALayer所提供。

19、遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些?

  • 最常用的就是cell的重用, 注册重用标识符
  • 避免cell的重新布局
  • 提前计算并缓存cell的属性及内容
  • 减少cell中控件的数量
  • 不要使用ClearColor,无背景色,透明度也不要设置为0,因为渲染耗时比较长
  • 使用局部更新
  • 加载网络数据,下载图片,使用异步加载,并缓存
  • 缓存行高
  • 少使用addView 给cell动态添加view

20、控制器的生命周期?

  • loadView: 加载view
  • viewDidLoad: view加载完毕
  • viewWillAppear: 控制器的view将要显示
  • viewWillLayoutSubviews: 控制器的view将要布局子控件
  • viewDidLayoutSubviews: 控制器的view布局子控件完成
  • viewDidAppear: 控制器的view完全显示
  • viewWillDisAppear: 控制器的view即将消失
  • viewDidDisAppear: 控制器的view完全消失

21、进程和线程的区别?

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

22、进程的持有实体分为那几个?

  • CPU
  • 内存
    • 堆区
    • 栈区
    • 全局区
    • 常量区
    • 代码区

23、事件响应的原理?

  1. 一个UIView发出一个事件之后,首先上传给其父视图、
  2. 父视图上传给其所在的控制器
  3. 如果其控制器对事件进行处理,事件传递将终止,否则继续上传父视图
  4. 直到遇到响应者才会停止,否则事件将一直上传,直到UIWindow

24、自动释放池的工作原理?

自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁时,将会向池中所有对象发送一条release消息,释放对象,[pool release]、[pool drain]表示的是池本身不会销毁,而是池子中的临时对象都被发送release,从而将对象销毁。

24、KVO的实现原理?

  • KVO是基于runtime机制实现的
  • 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法。派生类在被重写的setter方法实现真正的通知机制

25、http请求中包括那些?

  • http请求是客户端往服务端发送请求动作,告知服务器自己的要求。
  • http请求由状态行、请求头、请求正文三部分组成:
  • 状态行:包括请求方式Method、资源路径URL、协议版本Version;
  • 请求头:包括一些访问的域名、用户代理、Cookie等信息;
  • 请求正文:就是HTTP请求的数据。
  • 备注:请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,103评论 1 32
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 2,567评论 0 20
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,356评论 0 35
  • 信作为表达感情的一种传统方式,在当今社会依然存在,我想其存在的独特价值应该就在于它可以将我们的感情跃然于纸上,真挚...
    Do霓阅读 1,082评论 0 1
  • 相逢是个奇妙而又独特的东西。 若是晚了,大约会感叹到相逢恨晚, 若要是早了,又要叹息着相逢恨早, 若是不能完整的走...
    桃子西瓜阅读 457评论 1 0