首地址,a + 1是数组下一元素的地址,即a[1],&a + 1是下一个对象的地址,即a[5]。
41.列举几种进程的同步机制,并比较其优缺点。
原子操作信号量机制自旋锁管理,会合,分布式系统
42.进程之间通信的途径
共享存储系统消息传递系统管道:以文件系统为基础。
43.进程死锁的原因
资源竞争及进程推进顺序非法。
44.死锁的四个必要条件。
互斥、请求保持、不可剥夺、环路。
45.死锁的处理
鸵鸟策略、预防策略、避免策略、检测与解除死锁
46.堆和栈的区别?
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memoryleak。
碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的—对应,以至于永远都不可能有一个内存块从栈中弹出。
分配方式:堆都是动态分配的,没有静态分配的堆。栈有两种分配方式:静态和动态分配。静态是编译器完成的,比如局部变量的分配。动态有alloc?函数进行分配,但是栈的动态分配和堆是不同的,他的动态是由编译器进行释放,无需我们手动实现。
分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持;分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的。它的机制是很复杂的。
47.C和Obj-C如何混用
1)Obj-C的编译器处理后缀为m的文件时,可以识别Obj-C和C的代码,处理mm文件可以识别Obj-C,C,C++代码,但cpp文件必须只能用C/C++代码,而且cpp文件include的头文件中,也不能出现Obj-C的代码,因为cpp只是cpp
2)在mm文件中混用cpp直接使用即可,所以Obj-C混cpp不是问题
3)在cpp中混用Obj-C其实就是使用Obj-C编写的模块是我们想要的。
模块以类实现,那要按照cpp class的标准写类的定义,头文件中不能出现Obj-C的东西,包括#import cocoa。类的实现代码中可以使用Obj-C的东西,可以import,只是后缀是mm。
如果模块以函数实现,那么头文件要按C
的格式声明函数,实现文件中,C++函数内部可以用得Obj-C,但后缀还是mm或m。
总结:只要cpp文件和cpp include的文件中不包含Obj-C的东西就可以用了,cpp混用Obj-C的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的时Obj-C编译后的文件,这个东西其实是无差别的,所以可以用,Obj-C的编译器支持cpp。
48.目标-动作机制
目标是动作消息的接受者。一个控件,或者更为常见的时它的单元,以插座变量的形式保有其动作消息的目标。
动作是控件发送给目标的消息,或者从目标的角度看,它使目标为了响应动作而实现的方法,程序需要某些机制来进行事件和指令的翻译,这个机制就是目标-动作机制。
49.cocoatouch框架
iPhoneOS 应用程序的基础Cocoa Touch 框架重用了许多 Mac 系统的成熟模式,但是它更多地专注于触摸的接口和优化。UIKit 为您提供了在 iPhone OS 上实现图形,事件驱动程序的基本工具,其建立在和 Mac OS X 中一样的 Foundation 框架上,包括文件处理,网络,字符串操作等。
CocoaTouch 具有和 iPhone 用户接口一致的特殊设计。有了 UIKit,您可以使用 iPhone OS 上的独特的图形接口控件,按钮,以及全屏视图的功能,您还可以使用加速仪和多点触摸手势来控制您的应用。
各色俱全的框架 除了UIKit 外,Cocoa Touch 包含了创建世界一流iPhone 应用程序需要的所有框架,从三维图形,到专业音效,甚至提供设备访问 API 以控制摄像头,或通过 GPS 获知当前位置。Cocoa Touch 既包含只需要几行代码就可以完成全部任务的强大的 Objective-C 框架,也在需要时提供基础的 C 语言 API 来直接访问系统。这些框架包括:
CoreAnimation
通过 CoreAnimation,您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。
CoreAudio
CoreAudio 是播放,处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能。
CoreData提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至可处理任何应用或大或小的数据模型。
功能列表:框架分类
下面是 CocoaTouch 中一小部分可用的框架:
? 音频和视频
? Core Audio
? OpenAL
? Media Library
? AV Foundation
? 数据管理
? Core Data
? SQLite
? 图形和动画
? Core Animation
? OpenGL ES
? Quartz 2D
? 网络/li>
? Bonjour
? WebKit
? BSD Sockets
? 用户应用
? Address Book
? Core Location
? Map Kit
? Store Kit
50.Obj-C的内存管理
如果你拷贝一个对象,你也拥有拷贝得到的对象,需要负责该对象的释放
如果你保持一个对象,你就部分拥有这个对象,需要在不再使用时候释放对象
51.自动释放池是什么,如何工作
当你向一个对象发送一个autorerelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。他仍然是正当的对象,因此自动释放池定义的作用域内的其他对象可以向他发送消息,当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
autorelease和release在引用计数减一的时机不同,autorelease会在对象的使用结束才做计数减一。
52.类工厂方法
类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并进行自动释放处理。另一个目的是使类提供单件实例。
53.单件实例是什么?
Foundation和Application Kit 框架中得一些类只允许创建单件对象,即这些类在当前进程中得唯一实例。
54.动态绑定—在运行时确定要调用的方法
动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑定技术,您的代码每次执行都