面试题6
2015-08-13 08:14
375 查看
11、strong 和 weak,_unsafe_unretained 与weak的区别
(1)strong叫强引用,weak叫弱引用,在arc中使用strong告诉编译器帮助我们自动插入retain,weak是普通赋值相当于手动内存管理内存的assign,
(2)_unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。
12、arc存在内存泄露码
arc如果内存管理不当的话,同样会存在内存泄露,例如:arc中也会循环引用导致内存泄露,oc对象与corefoundation类之间桥接时,管理不当也会产生内存泄露。
13、当我们释放对象时,为什么需要调用[super dealloc]方法?
因为,子类是继承父类,那么子类中有一些实例变量(对象),是继承父类的,因此,我们需要调用父类方法,将父类所拥有的实例进行释放
14、自动释放池是什么,如何工作
自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁后,将会向池中所有对象发送一条release消息,释放对象。
15、为什么delegate(代理)属性都是assign而不是retain的?
防止循环引用,以至于对象无法得到正确的释放。
16、ios开发中数据持久性,有哪几种
plist文件写入、对象归档、sqlite3数据库、coredata
17、什么是kvc和kvo?以及他们之间的关系是什么
(1)kvc(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量
(2)kvo(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
(3)实现kvo键值观察模式,被观察的对象必须使用kvc键值编码来修改他的实例变量,这样才能被观察者观察到。因此,kvc是kvo的基础或者说kvo的实现是建立在kvc的基础上的。
18、简述常见的设计模式
单例设计、代理设计、观察者(通知) 、工厂方法、模板方法
19、内存管理 在dealloc开发中 用release方法好还是用self xxx =nil好
使用self.xxx =nil 更好,因为先调用了release方法,而且还将变量设置为nil,这样就更安全的释放对象,防止野指针调用。
20、线程与进程的区别和联系?
一般的应用程序是单个进程,也有多进程(谷歌浏览器),进程是个静态的容器,里面容纳了很多个线程,线程是一系列方法的线性执行路径。
21、oc语言的优缺点
(1)优点:类目、动态识别、支持c语言、oc与c++可以混编
(2)缺点:不支持命名空间、不支持运算符重载、不支持多重继承
22、代理delegate与通知notification、block的使用区别
delegate与block一般是用于两个对象1对1之间的通信交互,delegate需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信。block更加简洁,不需要定义繁琐的协议方法,但是如果通信事件比较多的话,建议使用delegate。notification主要用于1对多的情况下通信,而且,通信对象之间不需要建立联系!但是使用通知,代码可读性差。
23、控制器viewcontroller的loadview,viewdidload,viewdidunload分别是在什么时候调用的?
(1)loadView调用:当控制器根视图view为空,且此view 被访问时则调用
(2)loadView调用之后调用viewdidload
(3)ios6.0之前,当内存警告时,先卸载视图,再调用viewdidunload来释放内存
24、@synthesize与@dynamic的区别
(1)@synthesize是系统自动生成getter和setter属性声明
(2)@dynamic 的意思是告诉编译器,属性的获取与赋值方法由用户自己实现,不自动生成。
25、事件响应者链的概念
响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件会沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者应该是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象(如果存在),然后是它的父视图(superview)对象(如果存在),一次类推,直到顶层视图。接下来会沿着顶层视图(top view)到窗口(UIWindow对象)再到程序(uiapplication对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。但有时候可以在视图的响应方法中根据一些条件来决定是否需要继续传递事件。
(1)strong叫强引用,weak叫弱引用,在arc中使用strong告诉编译器帮助我们自动插入retain,weak是普通赋值相当于手动内存管理内存的assign,
(2)_unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。
12、arc存在内存泄露码
arc如果内存管理不当的话,同样会存在内存泄露,例如:arc中也会循环引用导致内存泄露,oc对象与corefoundation类之间桥接时,管理不当也会产生内存泄露。
13、当我们释放对象时,为什么需要调用[super dealloc]方法?
因为,子类是继承父类,那么子类中有一些实例变量(对象),是继承父类的,因此,我们需要调用父类方法,将父类所拥有的实例进行释放
14、自动释放池是什么,如何工作
自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁后,将会向池中所有对象发送一条release消息,释放对象。
15、为什么delegate(代理)属性都是assign而不是retain的?
防止循环引用,以至于对象无法得到正确的释放。
16、ios开发中数据持久性,有哪几种
plist文件写入、对象归档、sqlite3数据库、coredata
17、什么是kvc和kvo?以及他们之间的关系是什么
(1)kvc(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量
(2)kvo(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
(3)实现kvo键值观察模式,被观察的对象必须使用kvc键值编码来修改他的实例变量,这样才能被观察者观察到。因此,kvc是kvo的基础或者说kvo的实现是建立在kvc的基础上的。
18、简述常见的设计模式
单例设计、代理设计、观察者(通知) 、工厂方法、模板方法
19、内存管理 在dealloc开发中 用release方法好还是用self xxx =nil好
使用self.xxx =nil 更好,因为先调用了release方法,而且还将变量设置为nil,这样就更安全的释放对象,防止野指针调用。
20、线程与进程的区别和联系?
一般的应用程序是单个进程,也有多进程(谷歌浏览器),进程是个静态的容器,里面容纳了很多个线程,线程是一系列方法的线性执行路径。
21、oc语言的优缺点
(1)优点:类目、动态识别、支持c语言、oc与c++可以混编
(2)缺点:不支持命名空间、不支持运算符重载、不支持多重继承
22、代理delegate与通知notification、block的使用区别
delegate与block一般是用于两个对象1对1之间的通信交互,delegate需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信。block更加简洁,不需要定义繁琐的协议方法,但是如果通信事件比较多的话,建议使用delegate。notification主要用于1对多的情况下通信,而且,通信对象之间不需要建立联系!但是使用通知,代码可读性差。
23、控制器viewcontroller的loadview,viewdidload,viewdidunload分别是在什么时候调用的?
(1)loadView调用:当控制器根视图view为空,且此view 被访问时则调用
(2)loadView调用之后调用viewdidload
(3)ios6.0之前,当内存警告时,先卸载视图,再调用viewdidunload来释放内存
24、@synthesize与@dynamic的区别
(1)@synthesize是系统自动生成getter和setter属性声明
(2)@dynamic 的意思是告诉编译器,属性的获取与赋值方法由用户自己实现,不自动生成。
25、事件响应者链的概念
响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件会沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者应该是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象(如果存在),然后是它的父视图(superview)对象(如果存在),一次类推,直到顶层视图。接下来会沿着顶层视图(top view)到窗口(UIWindow对象)再到程序(uiapplication对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。但有时候可以在视图的响应方法中根据一些条件来决定是否需要继续传递事件。
相关文章推荐
- 黑马程序员--JAVA基础语法之--关键字、常亮、变量、标识符
- 【LeetCode-面试算法经典-Java实现】【119-Pascal's Triangle II(帕斯卡三角形(杨辉三角)II)】
- 【LeetCode-面试算法经典-Java实现】【118-Pascal's Triangle(帕斯卡三角形)】
- 黑马程序员-Java基础:集合
- 黑马程序员——Java中IO流下
- 黑马程序员--Java基础--IO流(三)
- 黑马程序员--Java基础--IO流(二)
- 程序员和工程师有什么不一样?
- 程序员世界常见的6个问题
- 程序员,为什么千万不要重写代码?
- 剑指offer面试题java版系列 题1 Singleton模式
- Android工程师面试宝典&面试实战试题详解01
- 黑马程序员——Java中对象的继承
- 面向程序员的数据库访问性能优化法则
- 黑马程序员——类与对象2
- 黑马程序员 oc随记 foundation框架 nsstring.NSmutable.nsarray与nsdictionay
- 面试之二百度
- 【黑马程序员】Foundation框架NSArray
- 面试题:比较两个集合是否相等?
- 面试题:阿里 天猫积分换魔盒