IOS试题收集1
IOS试题收集1
1、Objective C中有多继承吗?没有的话用什么代替?
Protocol
2、Objective C中有私有方法吗?私有变量呢?
OC类里面只有静态方法和实例方法这两种,@private可以用来修饰私有变量,所有实例方法默认都是公有的,如果想要可以达到私有效果的方法可以不把方法的声明放在@interface...@end
3、关键字const的含义是什么?
const int a;
int const a;
coust int *a;
int *const a;
int const *a const;
解释:前两个一样,都为整形常量;第三个为指针指向不变的整形常量,即指针可变,整形常量不可变;第四个为指向可变的整形变量的常量指针,即整形变量可变,指针不会变;第五个为常指针指向整形常量;
4、关键字volatile的含义是什么?
5、关键字static
C++和Objective C中的static
4、#import和#include的区别,@class代表什么?
#import不会引起重复包含
5、线程和进程的区别
进程和线程都是由操作系统所体会的程序运行的基本 单元,系统利用该基本单元实现系统对应用的并发性。 进程和线程的主要差别在于它们是不同的操作系统资 源管理方式。进程有独立的地址空间,一个进程崩溃 后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程
6、堆和栈的区别
管理方式:对于栈来讲,是由编译器自动管理,无需 我们手工控制;对于堆来说,释放工作由程序员控制, 容易产生memory leak。
申请大小:
栈:在Windows下,栈是向低地址扩展的数据结构,是
一块连续的内存的区域。这句话的意思是栈顶的地址
和栈的最大容量是系统预先规定好的,在WINDOWS
下,栈的大小是2M(也有的说是1M,总之是一个编
译时就确定的常数),如果申请的空间超过栈的剩余
空间时,将提示overflow。因此,能从栈获得的空间
较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存
区域。这是由于系统是用链表来存储的空闲内存地址
的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟
内存。由此可见,堆获得的空间比较灵活,也比较大。
碎片问题:对于堆来讲,频繁的new/delete势必会造
成内存空间的不连续,从而造成大量的碎片,使程序
效率降低。对于栈来讲,则不会存在这个问题,因为
栈是先进后出的队列,他们是如此的一一对应,以至
于永远都不可能有一个内存块从栈中间弹出
分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配
是编译器完成的,比如局部变量的分配。动态分配由
alloca函数进行分配,但是栈的动态分配和堆是不同
的,他的动态分配是由编译器进行释放,无需我们手
工实现。
分配效率:栈是机器系统提供的数据结构,计算机会
在底层对栈提供支持:分配专门的寄存器存放栈的地
址,压栈出栈都有专门的指令执行,这就决定了栈的
效率比较高。堆则是C/C++函数库提供的,它的机制
是很复杂的。
7、Objective C的内存管理机制
8、IOS有没有垃圾回收
9、UITableView的重用机制
UITableView头文件,会找到NSMutableArray* visiableCells和NSMutableDictnery* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCells保存可重用的cells
10、ViewController的loadView、viewDidLoad、viewDidUnload分别什么时候调用的,在自定义ViewController时在几个函数中应该做什么工作?
init方法
在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初始化ViewController本身
loadView方法
当view需要被展示而它却是nil时,viewController会调
用该方法。不要直接调用该方法。
如果手工维护views,必须重载重写该方法
如果使用IB维护views,必须不能重载重写该方法
loadView和IB构建view
你在控制器中实现了loadView方法,那么你可能会在
应用运行的某个时候被内存管理控制调用。
如果设备内存不足的时候, view 控制器会收到
didReceiveMemoryWarning的消息。
默认的实现是检查当前控制器的view是否在使用。
如果它的view不在当前正在使用的view hierarchy里
面,且你的控制器实现了loadView方法,那么这个
view将被release, loadView方法将被再次调用来创建
一个新的view。
viewDidLoad方法
viewDidLoad 此方法只有当view从nib文件初始化的
时候才被调用。
重载重写该方法以进一步定制view在iPhone OS 3.0及之后的版本中,还应该重载重写
viewDidUnload来释放对view的任何索引
viewDidLoad后调用数据ModelviewDidUnload方法
当系统内存吃紧的时候会调用该方法(注:
viewController没有被dealloc)
内存吃紧时,在iPhone OS 3.0之前
didReceiveMemoryWarning
是释放无用内存的唯一
方式,但是OS 3.0及以后viewDidUnload方法是更好
的方式
在该方法中将所有IBOutlet(无论是property还是实例
变量)置为nil(系统release view时已经将其release
掉了)
在该方法中释放其他与view有关的对象、其他在运行
时创建(但非系统必须)的对象、在viewDidLoad中
被创建的对象、缓存数据等 release对象后,将对象
置为nil(IBOutlet只需要将其置为nil,系统release
view时已经将其release掉了)
一般认为viewDidUnload是viewDidLoad的镜像,因为
当view被重新请求时,viewDidLoad还会重新被执行
viewDidUnload中被release的对象必须是很容易被重
新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新
创建的对象dealloc方法
viewDidUnload和dealloc方法没有关联,dealloc还是
继续做它该做的事情
ViewController的didReceiveMemoryWarning是在什
么时候调用的?默认的操作是什么?
当程序接到内存警告时View Controller将会收到这个
消息:didReceiveMemoryWarning
从iOS3.0开始,不需要重载这个函数,把释放内存的
代码放到viewDidUnload中去。
这个函数的默认实现是:检查controller是否可以安全
地释放它的view(这里加粗的view指的是controller的
view属性),比如view本身没有superview并且可以被
很容易地重建(从nib或者loadView函数)。
如果view可以被释放,那么这个函数释放view并调用
viewDidUnload。
你可以重载这个函数来释放controller中使用的其他
内存。但要记得调用这个函数的super实现来允许父类
(一般是UIVIewController)释放view。
如果你的ViewController保存着view的子view的引用,
那么,在早期的iOS版本中,你应该在这个函数中来释放这些引用。而在iOS3.0或更高版本中,你应该在
viewDidUnload中释放这些引用
11、怎么理解MVC,在Cocoa中MVC是怎么实现的?
12、delegate和notification区别,分别在什么情况下使用?
13、KVC(Key-Value-Coding)
KVO(Key-Value-Observing)
理解KVC与KVO(键-值-编码与键-值-监看)
14、self.跟self什么区别?id、nil代表什么?
15、Category和Protocol
16、iOS程序运行流程
1. 系统调用app的main函数
2. main函数调用UIApplicationMain.
3. UIApplicationMain创建shared application
instance, UIApplication默认的instance.
4. UIApplicationMain读取Info.plist找到主nib文件, 加
载nib,把shared application instance 设为nib的
owner.
IOS试题收集1的更多相关文章
- 原 iOS面试题收集
原 iOS面试题收集 发表于2年前(2013-07-22 13:47) 阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定 ...
- 李洪强iOS开发之iOS学习方法收集
李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...
- 漫谈iOS Crash收集框架
漫谈iOS Crash收集框架 Crash日志收集 为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,C ...
- 前端开发面试题收集 JS
前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...
- 李洪强iOS开发之iOS社区收集
李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
- 经典Java面试题收集
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- linux运维工程师面试题收集
面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...
随机推荐
- F#相关图书推荐
C#与F#编程实践 作 者 [捷] Tomas Petricek,[英] Jon Skeet 著:贾洪峰 译 出 版 社 清华大学出版社 出版时间 2011-10-01 版 次 1 ...
- Spark及其应用场景初探
最近老大让用Spark做一个ETL项目,搭建了一套只有三个结点Standalone模式的Spark集群做测试,基础数据量大概8000W左右.看了官方文档,Spark确实在Map-Reduce上提升了很 ...
- Eralng 小知识点
文件属性 提取方法:Module:module_info/1 头文件 包含头文件 -include(FileName). %% FileName为绝对路径或相对路径 引入库中包含文件 -include ...
- 关于python requests包新版本设置代理的问题
在更新了requests包之后,发现我电脑上的charles工具无法再成功抓取到数据包.百度了半年都没有找到原因. 然后 我使用了 google 查到了 charles的最新的文档发现.需要设置代理, ...
- compiled python files
[compiled python files] As an important speed-up of the start-up time for short programs that use a ...
- C++11外部模板
[C++11之外部模板] 在标准C++中,只要在编译单元内遇到被完整定义的模板,编译器都必须将其实例化(instantiate).这会大大增加编译时间,特别是模板在许多编译单元内使用相同的参数实例化. ...
- HDU 1525 Euclid's Game (博弈)
Euclid's Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- 微软IOC容器Unity简单代码示例3-基于约定的自动注册机制
@(编程) [TOC] Unity在3.0之后,支持基于约定的自动注册机制Registration By Convention,本文简单介绍如何配置. 1. 通过Nuget下载Unity 版本号如下: ...
- UIView UITableView 背景图片添加
这几天,经常用到为某个视图设置背景图片,而API中UIView没有设置背景图片的方法,搜集归纳如下: 第一种方法: 利用的UIView的设置背景颜色方法,用图片做图案颜色,然后传给背景颜色. UICo ...
- HDU2955Robberies(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=2955 题目是说一小偷偷东西,第i个物品的价值是M[i],被抓的概率是p[i],现在要使得在被抓的概率在P以下时的 ...