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 ...
随机推荐
- C#语言基础02
字符串:string s="ab";string s1="a\nb";//n:newline或者next的意思. string s="a\\b&quo ...
- Oracle 学习用
最近在学习Oracle数据库 ,公司用这个,学习到现在,唉!苦逼的程序员呀! 也只能在这里发发牢骚了,这个是转载的 ,发完睡觉! oracle sql语句 一.ORACLE的启动和关闭 .在单机环境下 ...
- ZeroCopyLiteralByteString cannot access superclass
问题描述 在HBase上运行MapReduce作业时,报如下异常:IllegalAccessError: class com.google.protobuf.HBaseZeroCopyByteStri ...
- 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...
- Jquery 操作页面中iframe自动跟随窗口大小变化,而页面不出现滚动条,只在iframe内部出滚动条
很多时候大家需要iframe自适应所加载的页面高度而不要iframe滚动条,但是这次我需要的是页面不需要滚动条而iframe要滚动条,且iframe自动跟随窗口大小变化.自适应页面大小.下面是代码,下 ...
- hdu 2199 Can you solve this equation?(高精度二分)
http://acm.hdu.edu.cn/howproblem.php?pid=2199 Can you solve this equation? Time Limit: 2000/1000 MS ...
- POJ 1947 Rebuilding Roads (树dp + 背包思想)
题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...
- servlet-3_0-final-spec
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://w ...
- effective c++ (二)
条款04:确定对象使用前已先被初始化 1.由于 c part of c++而且初始化可能导致运行期成本,那么就不保证发生初始化:例如arry是c part of c++的部分从而不能保证初始化,而ST ...
- java(2014版)连接数据库的工具类
package util; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; ...