面试题目1讲述.docx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面试题目1讲述

1.Objective-C有多重继承吗?不是的话有什么代替方法? 答:cocoa?中所有的类都是NSObject?的子类,多继承在这里是用protocol?委托代理?来实现的 。你不用去考虑繁琐的多继承?,虚基类的概念.多态特性?在?obj-c?中通过委托来实现. 2.简述#import跟#include的区别,@class呢? 答:@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要 使用#import而#import比起#include的好处就是不会引起重复包含 3.关键字volatile有什么含义?并给出三个不同的例子 答:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:???并行设备的硬件寄存器(如:状态寄存器) ??一个中断服务子程序中会访问到的非自动变量(Non-automatic?variables)???多线程应用中被几个任务共享的变量? a ???一个参数既可以是const还可以是volatile吗 ??一个指针可以是volatile?吗?解释为什么。? 下面是答案: ??是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 ??是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 ?4.简述线程与进程的区别和联系 答:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。?进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 5.?简述readwrite,readonly,assign,retain,copy,nonatomic属性的作用 答案:@property是?一个属性访问声明,扩号内支持以下几个属性: getter=getterName,setter=setterName,设置setter与?getter的方法名 readwrite,readonly,设置可供访问级别 assign,setter方法直接赋值,不进行?任何retain操作,为了解决原类型与循环引用问题 retain,setter方法对参数进行release旧值再retain新值,所有?实现都是这个顺序(CC上有相关资料) copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再?Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。 nonatomic,非原子性访问,不加同步,?多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。 6.写出以下代码的执行结果: main() { int?a[5]={1,2,3,4,5}; int?*ptr=(int*)(a+1); printf(“%d%d”,*(a+1),*(ptr-1)); } ? 答案:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5。a+1不是首地址+1,系统会认为加一个a数组的偏?移,是偏移了一个数组的大小(本例是5个int) int?*ptr=(int?*)(a+1); 则ptr实际?是(a[5]),也就是a+5 原因如下:a是数组指针,其类型为?int?(*)[5];而?指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。a是长度为5的int数组指针,所以要加?5*sizeof(int),以ptr实际是a[5]。但是prt与(a+1)类型是不一样的(这点很重要)。所以prt-1只会减去sizeof(int*),a,a的地址是一样的,但意思不一样。?a是数组首地址,也就是a[0]的地址,a是对象(数组)首地址,?a+1是数组下一元素的地址,即a[1],a+1是下一个对象的地址,即a[5]. 7.写一个委托的interface 答案: @protocol?MyDelegate; @interface?MyClass:?NSObjec

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档