ios 面试题整合1

3.在一个对象的方法里面:self.name= “object”;和\u2028name =”object”\u2028有什么不同吗?

self.name ="object":会调用对象的setName()方法;

name = "object":会直接把object赋值给当前对象的name属性。
函数前的 + -方法修饰符
- 代表此方法是实例方法,必须先 生成类实例,通过实例才能调用该方法;
+ 代表此方法是类的静态方法,可以直接调用,而不用生成实例。!

4.请简述self.name= nil的机制,以及与[namerelease]的区别?

self.name =nil;   //使用nil参数调用setName:方法

[name release]生成的访问器将自动释放以前的name对象

 5.请简要说明viewDidLoad和viewDidUnload何时调用

viewDidLoad在view从nib文件初始化时调用,

loadView在controller的view为nil时调用。

此方法在编程实现view时调用,view控制器默认会注册memory warning notification,

当view controller的任何view没有用的时候,

viewDidUnload会被调用,在这里实现将retain的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。
6.实例化一个UITableView对象,要求写出关键语句?
答:UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];
my.delegate = self;
my.dataSource = self;
首先需要分配空间设置表格类型
然后需要设置两个必须的委托对象。
7.使用sql语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名自定义)

select*fromcitys where postcode=436001 and province=’湖%’;

8.打印结果

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].

 

void Func ( char str[100] )  \u2028

{ \u2028 

sizeof(str ) = ?  \u2028

} \u2028

void*p = malloc( 100 ); \u2028sizeof( p ) = ?

这题 很常见了,Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等 操作,可以被修改。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof( p ) 都为4。
9.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

答:#defineSECONDS_PER_YEAR (60 * 60 * 24 * 365)UL  

我在这想看到几件事情:  

 #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)  

懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 

意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。  

如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。  
10.写一"\u2028标准"宏MIN ,这个宏输入两个参数并返回较小的一个

答:#define MIN(A,B) ((A) <= (B) ? (A) : (B))  

这个测试是为下面的目的而设的:  

标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方 

法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。  

三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else 更优化的代码,了解这个用法是很重要的。 懂得在宏中小心地把参数用括号括起来  我也用这个问题开始讨论宏的副作用,例如: 当你写下面的代码时会发生什么事?  least = MIN(*p++, b);  

结果是: 

((*p++) <= (b) ? (*p++) :(*p++)) 

这个表达式会产生副作用,指针p会作三次++自增操作。

11.数组和指针的区别

(1)数组可以申请在栈区和数据区;指针可以指向任意类型的内存块

(2)sizeof作用于数组时,得到的是数组所占的内存大小;作用于指针时,得到的都是4个字节的大小

(3)数组名表示数组首地址,值不可以改变,如不可以将 ++ 作用于数组名上;普通指针的值可以改变,如可将++作用于指针上

(4)用字符串初始化字符数组是将字符串的内容拷贝到字符数组中;用字符串初始化字符指针是将字符串的首地址赋给指针,也就是指针指向了该数组

13.简述内存分区情况

(1)代码区:存放函数二进制代码

(2)数据区:系统运行时申请内存并初始化,系统退出时由系统释放。存放全局变量、静态变量、常量

(3)堆区:通过malloc等函数或new等操作符动态申请得到,需程序员手动申请和释放

(4)栈区:函数模块内申请,函数结束时由系统自动释放。存放局部变量、函数参数

 

14.#include<filename>和#include”filename”有什么区别

答:#include<filename>直接在库文件目录中搜索所包含的文件;#include”filename”在当前目录下搜索所包含的文件,如果没有的话再到库文件目录搜索。

15.(1)const char *p;(2)charconst*p;(3)char*const p;(4)const char* const p;四个修饰指针有什么区别

答:(1)定义了一个指向不可变的字符串的字符指针

    (2)和(1)一样

    (3)定义了一个指向字符串的指针,该指针值不可改变,即不可改变指向

    (4)定义了一个指向不可变的字符串的字符指针,且该指针也不可改变指向


 

19.free与release的区别
free()是C标准库里面的,是一个函数。它调用malloc(),可以立即释放内存。因此它必须有malloc()传递一个指针,不然会引起异常。
-release是NSobject类的一个方法。它不会立即释放内存,它只是减少对象的一个引用计数。一直到它检测到0,然后调用-dealloc()。
21.ARC机制

ARC就是automatic reference counting ,简单说就是就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。

看到上面的例子,大家就知道了,以后写Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了

代码的总量变少了,看上去清爽了不少,也节省了劳动力

代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性

不好的地方

记住一堆新的ARC规则—关键字及特性等需要一定的学习周期

一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关

 22.自动释放池是什么,如何工作

23.ViewController 的 loadView, viewDidLoad,viewDidUnload 分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

viewDidLoad在view 从nib文件初始化时调用,loadView在controller的view为nil时调用。此方法在编程实现view时调用,view 控制器默认会注册memory warning notification,当view controller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。

24. 浅复制和深复制的区别?//浅拷贝和深拷贝\u2028

\u2028浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身。//通过对象的指针来访问这个对象\u2028

深层复制(mutableCopy):复制引用对象本身\u2028意思就是有个A对象,复制一份后得到A_copy对象后,对于 浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源\u2028还是只有一份,那如果我们对A_copy执行了修改操 作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了\u2028两份独立对象本身。//当修改A时,A copy不变。

25. frame和bounds有什么不同

\u2028答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)//frame:框架、结构\u2028

bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)//bounds:界限

26. obj-c的优缺点 

objc优点: 

  1) Cateogies 

  2) Posing 

  3) 动态识别 

  4) 指标计算 

  5)弹性讯息传递 

  6) 不是一个过度复杂的 C 衍生语言 

  7) Objective-C 与 C++ 可混合编程 

缺点: 

  1) 不支援命名空间 

  2)  不支持运算符重载 

  3) 不支持多重继承 

  4) 使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。 

27.  用变量a给出下面的定义   

a) 一个整型数(An integer)   

b)一个指向整型数的指针( A pointer to aninteger)   

c)一个指向指针的的指针,它指向的指针是指向一个整型数( Apointer to a pointer to an intege)r   

d)一个有10个整型数的数组( An array of 10 integers)   

e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)   

f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)   

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointer to a function that takes an integer as an argument 

 andreturns an integer)   

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions t 

hat takean integer argument and return an integer )  

答案是:   

a) int a; // Aninteger   

b) int *a; // A pointer to aninteger   

c) int **a; // A pointer to apointer to an integer   

d) int a[10]; // An array of10 integers   

e) int *a[10]; // An array of10 pointers to integers   

f) int (*a)[10]; // A pointerto an array of 10 integers   

g) int (*a)(int); // A pointerto a function a that  takes an integer argument and returns aninteger   

h) int (*a[10])(int); // Anarray of 10 pointers to functions  that take an integer argument andreturn an integer 

29.队列和栈有什么区别:

答:队列和栈是两种不同的数据容器。从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。

队列是一种先进先出的数据结构,它在两端进行操作,一端进行入队列操作,一端进行出列队操作。

答案:1.GET方法

GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见;

GET 方法提交的数据大小有限

GET 方法不可以设置书签

2.POST 方法

POST 方法提交数据安全,数据置于消息主体内,客户端不可见

POST 方法提交的数据大小没有限制

POST 方法可以设置书签

31.  iOS的系统架构分为(核心操作系统层theCore OS layer)、(核心服务层 theCore Services layer)、(媒体层 theMedia layer)和(Cocoa界面服务层the Cocoa Touch layer)四个层次。

32.  控件主要响应3种事件:(基于触摸的事件)、(基于值的事件)和(基于编辑的事件)。

33.  xib文件的构成分为哪3个图标?都具有什么功能。(10分)

答:File’s Owner 是所有nib文件中的每个图标,它表示从磁盘加载nib文件的对象;

First Responder就是用户当前正在与之交互的对象;

View显示用户界面;完成用户交互;是UIView类或其子类。

34.  简述视图控件器的生命周期(10分)。

答:loadView尽管不直接调用该方法,如多手动创建自己的视图,那么应该覆盖这个方法并将它们赋值给试图控制器的view属性。

viewDidLoad只有在视图控制器将其视图载入到内存之后才调用该方法,这是执行任何其他初始化操作的入口。

viewDidUnload当试图控制器从内存释放自己的方法的时候调用,用于清楚那些可能已经在试图控制器中创建的对象。

viewVillAppear当试图将要添加到窗口中并且还不可见的时候或者上层视图移出图层后本视图变成顶级视图时调用该方法,用于执行诸如改变视图方向等的操作。实现该方法时确保调用[super viewWillAppear:].

viewDidAppear当视图添加到窗口中以后或者上层视图移出图层后本视图变成顶级视图时调用,用于放置那些需要在视图显示后执行的代码。确保调用[super viewDidAppear]

35.  动画有基本类型有哪几种;表视图有哪几种基本样式(10分)?

答:动画有两种基本类型:隐式动画和显式动画。

36.  实现简单的表格显示需要设置UITableView的什么属性、实现什么协议(10分)?

答:实现简单的表格显示需要设置UITableViewdataSourcedelegate属性,实现UITableViewDataSourceUITableViewDelegate协议。

37.  Cocoa Touch提供了哪几种Core Animation过渡类型(10分)?

答:Cocoa Touch提供了4Core Animation过渡类型,分别为:交叉淡化、推挤、显示和覆盖。

38.  UIView与CLayer有什么区别(10分)?

答:1. UIViewiOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性。

2. UIView有个重要属性layer,可以返回它的主CALayer实例。

3. UIViewCALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer,来完成某些特殊的表示。即CALayer层是可以嵌套的。

4. UIViewlayer树形在系统内部,被维护着三份copy。分别是逻辑树,这里是代码可以操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。

5. 动画的运作:对UIViewsubLayer(非主Layer)属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是0.5秒。

6. 坐标系统:CALayer的坐标系统比UIView多了一个anchorPoint属性,使用CGPoint结构表示,值域是0~1,是个比例值。这个点是各种图形变换的坐标原点,同时会更改layerposition的位置,它的缺省值是{0.5,0.5},即在layer的中央。

7.渲染:当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay方法来重绘显示。

8.变换:要在一个层中添加一个3D或仿射变换,可以分别设置层的transformaffineTransform属性。

9.变形:Quartz Core的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。CATransform3D的一套方法提供了一些魔术般的变换效果。

40.  链表逆序(C语言)(10分)。

链表逆序就是把一个链表按照原来的链接顺序逆序实现(也就是将头变成尾,尾变成头)。

编程思路:其实最关键的是先通过原来的链接顺序找到下个节点,然后再把前个节点反序。

41. Quatrz 2D的绘图功能的三个核心概念是什么并简述其作用(10分)。

答:上下文:主要用于描述图形写入哪里;

路径:是在图层上绘制的内容;

状态:用于保存配置变换的值、填充和轮廓,alpha值等。

42.  iPhone OS主要提供了几种播放音频的方法(10分)?

答:SystemSound Services

AVAudioPlayer

Audio Queue Services

OpenAL

43.  使用AVAudioPlayer类调用哪个框架、使用步骤(10分)?

答:AVFoundation.framework

步骤:配置AVAudioPlayer对象;

实现AVAudioPlayer类的委托方法;

控制AVAudioPlayer类的对象;

监控音量水平;

回放进度和拖拽播放。

44.  有哪几种手势通知方法、写清楚方法名(10分)?

-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;

-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event; 

45.  实例化一个UITableView对象,要求写出关键语句(10分)。

答:UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];

my.delegate = self;

my.dataSource = self;

首先需要分配空间设置表格类型

然后需要设置两个必须的委托对象。

46.  CFSocket使用有哪几个步骤(10分)。

答:创建Socket的上下文;创建Socket;配置要访问的服务器信息;封装服务器信息;连接服务器;

47.  Core Foundation中提供了哪几种操作Socket的方法(10分)?

答:CFNetworkCFSocketBSD Socket

48.  解析XML文件有哪几种方式(10分)?

答:以DOM方式解析XML文件;以SAX方式解析XML文件;

49.  delegate 自定义一个委托(15分)。

答:@protocol SimpleProtocol

-(void)doSomething:(NSString*)str;

@end

@interfaceSimpleClass:NSObject< SimpleProtocol >{

}

@end

@implementationSimpleClass

-(void)doSomething:(NSString *)str

{

NSLog(str);

}

@end

50.  类别的作用?继承和类别在实现中有何区别?

答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。继承可以增加,修改方法,并且可以增加属性。

51.通知和协议的不同之处?

答案:协议有控制链(has-a)的关系,通知没有。首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。

52.关于多态性\u2028

答案:多态,子类指针可以赋值给父类。这个题目其实可以出到一切面向对象语言中,因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来。最重要的是转化成自我理解。

53.对于单例的理解\u2028

答案:基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。进一步点,考虑下如何在多线程访问单例时的安全性。

54.  是否在一个视图控制器中嵌入两个tableview控制器?\u2028

答案:一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧,只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController那样的感觉。

55.\u2028一个tableView是否可以关联两个不同的数据源?你会怎么处理?

答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?

57. id声明的对象有什么特性?

答案:id是个很重要的类型,是个可以指向任何类型的指针或者可以理解为指向任何未知类型的指针。

58.自动释放池跟GC(垃圾回收)有什么区别?iPhone上有GC么?[poolrelease] 和[pooldrain]有什么区别?

iPhone上没有GCiPhone开发的时候没有垃圾回收机制。
在垃圾回收环境中,release是一个空操作。因此,NSAutoreleasePool提供了drain方法,在引用计数环境中,该方法的作用等同于调用release,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当前的阈值)。因此,在通常情况下,您应该使用drain而不是release来销毁自动释放池。

59.  线程与进程的区别和联系?

答案: 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个 进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一 个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共 享某些变量的并发操作,只能用线程,不能用进程。

60. ios平台怎么做数据的持久化?coredata和sqlite有无必然联系?coredata是一个关系型数据库吗?

iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3Core Datacore data可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用core data的时候,你不用安装额外的数据库系统,因为core data使用内置的sqlite数据库。core data将你app的模型层放入到一组定义在内存中的数据对象。coredata会追踪这些对象的改变,同时可以根据需要做相反的改变,例如用户执行撤销命令。当core data在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。
mac os x
sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与core data框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。
Core Data
不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型,但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对一、对多的关系。

63.假定输入的字符串中只包含字母和*号。编写函数fun,功能是,除了中间和尾部的*号外,

将字符串中其他*号全部删除。编写时,不用c的其他函数。

例:*****A*BC*DEF*G****    结果为:A*BC*DEF*G****

void fun (char *a)

 {

int j=0;

char *p=a;

while (*p=='*')p++;

while (*p){

a[j++]=*p;

p++;

 }

a[j]=0;

 }

64.截取字符串”20|http://www.621life.com“ 中 ‘|’字符前面及后面的数据,分别输出它们(10分)。

NSString *str = "20|http://www.621life.com";

NSRange range = [strrangeOfString:@"|"];

int location = range.location;

NSString *str1 = [strsubstringToIndex:location];

NSString *str2 = [str substringFromIndex:location+1];

65.获取项目根路径,并在其下创建一个名称为userData的目录。(10分)。

// 获取根路径

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *documentsDirectory = [paths objectAtIndex:];

// 创建文件系统管理器

NSFileManager *fileManager = [[NSFileManageralloc] init];

// 判断userData目录是否存在

if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]]) {

// 不存在,创建一个userData目录

[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]withIntermediateDirectories:falseattributes:nilerror:nil];

}

66.tableView的重用机制(10分)?

UITableView通过重用单元格来达到节省内存的目的:通过为每个单元格指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,以及当单元格滚出屏幕时,允许恢复单元格以便重用.对于不同种类的单元格使用不同的ID,对于简单的表格,一个标识符就够了.

67.这段代码有什么问题吗

@implementation Person  

i.       (void)setAge:(int)newAge

{  self.age = newAge;  }

死循环

68.用变量a给出下面的定义

a)    一个整型

b)    一个指向整型数的指针

c)    一个指向指针的的指针,它指向的指针是指向一个整型数

d)    一个有10个整型数的数组

e)    一个有10个指针的数组,该指针是指向一个整型数的

f)    一个指向有10个整型数数组的指针

g)    一个指向函数的指针,该函数有一个整型参数并返回一个整型数

h)    一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

a)   int a;

b)   int *a;

c)   int **a;

d)   int a[10]

e)   int *a[10];

f)   int (*a)[10];

g)   int (*a)(int);

i)   int (*a[10])(int);

 

69.给定一个字符串,输出本字符串中只出现一次并且最靠前的那个字符的位置?

比如"abaccddeeef" 则是b,输出2

 

int find(char *_str)

{

char *p = _str;

inti = 1;

while (*p)

{

char *temp = _str;

while (*temp)

{

if ((*p ==*temp)&&(p != temp))

{

break;

}

temp++;

if (*temp == 0) {

returni;

}

}

i++;

p++;

}

return-1;

}

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

intfind_char(constchar* str)

{

staticintpos[256];

const unsigned char* p =(const unsigned char*)str;

inti = 0;

if( (!str) || (!(*str)) )return -1;

memset(pos,-1,sizeof(pos));

while(*p){

if(pos[*p] == -1){

pos[*p] = p-(const unsigned char*)str;

}else{

pos[*p] = -2;

}

p++;

}

for(i=0;i<sizeof(pos)/sizeof(pos[0]);i++){

if(pos[i]>=0)returnpos[i];

}

return -1;

}

int main()

{

constchar* p ="abaccddeeef";

intpos = find_char(p);

printf("%d, it is'%c'\n",pos,pos!=-1?p[pos]:' ');

p ="abcdefghijklmnopqrstuvwxyz "

"abcdefghijklmnopqrstuwxyz";

pos = find_char(p);

printf("%d, it is'%c'\n",pos,pos!=-1?p[pos]:' ');

return0;

}

70.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么?

在OC中NSNumber是数字对象,可以进行拆装箱操作!

//将int转为NSNumber

NSNumber *num = [NSNumber numberWithInt:123];

//得到一个int

inttestNum = [numintValue];

71.用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数

NSLog(@”%0.1f”,4.4324);

72.objective-c中的词典对象、可变词典对象是哪个,初始化一个含有两个键值对的可变词典对象,并动态的添加和删除一条记录,输出第一条记录.

词典NSDictionary,可变词典NSMutableDictionary,

//初始化一个可变词典,带有2个键值对

NSMutableDictionary *dic =[NSMutableDictionarydictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];

//添加

[dicsetObject:@"value3"forKey:@"key3"];

//删除

[dicremoveObjectForKey:@"key3"];

//获取(按key获取)

[dicobjectForKey:@"key1"];

73.获取项目根路径,并在其下创建一个名称为userData的目录。

// 获取根路径

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documentsDirectory = [paths objectAtIndex:];

// 创建文件系统管理器

NSFileManager *fileManager= [[NSFileManageralloc] init];

// 判断userData目录是否存在

if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]]) {

// 不存在,创建一个userData目录

[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]withIntermediateDirectories:falseattributes:nilerror:nil];

}

74.do-while与 while-do的区别?

do-while 先执行循环体,然后判断条件,如果条件判断为ture,则继续执行循环体,如果判断为false,则不执行循环体

while-do 是先判断条件是否正确,若正确则执行循环体,若不正确则不执行循环体。

所以do-while至少循环一次,而while-do有可能一次也不循环。

75.用C语言,求2到100内的所有素数和。

 

#include<stdio.h>

intisPrime(int n)             //求素数,这是最经典的算法代码。建议记住

{

inti;

for(i=2;i*i<=n;i++)

if(n%i==0)

return 0;

return 1;

}

int main()

{

inti,sum=0;

for(i=2;i<100;i++)

if( isPrime(i))

sum+=i;

printf("%5d",sum);

return 0 ;

}

intisPrime(int n)

{

   inti;

   for(i=2;i<=n/2;i++)

   {

      if(n%i==0)

         break;

   }

   if(i>n/2)

      return1;

   else

      return0;

}

76.单件实例是什么(10分)。

Foundation 和 Application Kit框架中的一些只允许创象,即在当前程中的唯一例。例来,NSFileManager和NSWorkspace 在使用都是基于象的例化。当向类请例的候,它会向您传递单例的一个引用,如果该实不存在,首先例的分配 和初始化。 象充当控制中心的角色,负责指引或协调类的各种服。如果在概念上只有一个例(比如
NSWorkspace
),就应该产生 一个例,而不是多个例;如果将来某一天可能有多个例,您可以使用例机制,而不是工厂方法或函数。 

77.自动释放池是什么,如何工作。

当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料产生,用户的订单内容由用户在购买菜品产生,用户预定信息由用户在预定餐桌操作产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值