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的更多相关文章

  1. 原 iOS面试题收集

    原 iOS面试题收集 发表于2年前(2013-07-22 13:47)   阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定 ...

  2. 李洪强iOS开发之iOS学习方法收集

    李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...

  3. 漫谈iOS Crash收集框架

    漫谈iOS Crash收集框架   Crash日志收集 为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,C ...

  4. 前端开发面试题收集 JS

    前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...

  5. 李洪强iOS开发之iOS社区收集

    李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...

  6. 李洪强iOS开发之iOS工具收集

    李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...

  7. 李洪强IOS开发之iOS好项目收集

    李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...

  8. 经典Java面试题收集

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...

  9. linux运维工程师面试题收集

    面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...

随机推荐

  1. C语言——内存分配

    1.在C语言的运行过程中,需要内存来存储数据.C语言使用的内存总体可以分为两类:一类是静态区,一类是动态区.2.静态数据存储区包含:只读数据区.已初始化的读写数据区.未初始化的读写数据区     动态 ...

  2. TopFreeTheme精选免费模板【20130617】

    今天给大家推荐8款最新的WordPress和Joomla主题,它们绝大部分都是屏幕自适应主题,Mobile相当友好.如果你喜欢它们,就赶快收藏起来吧. Spacing – 来自Themeforest的 ...

  3. 浅谈Spark(1) - Overview

    Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是 ...

  4. Hadoop概述

    本章内容 什么是Hadoop Hadoop项目及其结构 Hadoop的体系结构 Hadoop与分布式开发 Hadoop计算模型—MapReduce Hadoop的数据管理 小结 1.1 什么是Hado ...

  5. 【FFT】专题总结

    学了若干天终于学(bei)会了传说中的法法塔 感觉也没那么难用嘛 fft快速傅里叶变换 在大表课件上写就是解决高精乘的工具 其实很有理有据 fft就是用复数的折半引理优化两个多项式相乘的高端东西 他能 ...

  6. HDU-2888 Check Corners 二维RMQ

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题.解题思路如下(转载别人写的): dp[row][col][i][j] 表示[row,ro ...

  7. [原创]Devexpress XtraReports 系列 9 创建邮件合并报表

    昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...

  8. HDU 4610 Cards (合数分解,枚举)

    Cards Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. 闲置的eSATA接口,会影响Windows 7的启动速度

      为方便用户连接外置硬盘等设备,很多中高 端主板上都有至少一个eSATA接口.事实上,很多人可能根本就不用eSATA接口,你想过没有,正是这个无所事事的eSATA接口,可能无意中就拖慢了 你的Win ...

  10. 删除对象中的key

    delete obj.a; delete obj["a"];