1、 应用程序如何省电?
设备一定的时间内没有检测到触摸事件,系统最初会使屏幕变暗,并最终完全关闭屏幕。大多数开发者都应该让这个定时器打开,但是,游戏和不使用触摸输入的应用程序开发者可以禁用这个定时器,使屏幕在应用程序运行时不会变暗。将共享的UIApplication对象的idleTimerDisabled属性设置为YES,就可以禁用自动休眠定时器。
比较费电,定位,网络连接,信号的搜索. 1:及时关闭定位.2不要频繁的请求网络,作本地存储.让用户主动的更新数据(上下拉刷新).3:提升程序的算法,优化代码,提高代码的质量.4:蓝牙,需要才连接,用完及时断开.5:界面的渲染,(游戏中)尽量提升效率,减少渲染次数.
2、 写一个递归方法:计算N的阶乘,然后将计算结果进行存储。以便应用退出后下次启动课直接获取该值。
int prime(int n){
if(n>1)
return n*prime(n-1); //返回值最好是long或者是lld
else
return 1;
}
3、 NSArray和NSMutableArray的区别,多线程操作哪个更安全?
NSArray创建之后会在堆中建立一块区域A,然后指针MoMo指向这块区域A,但是这块区域的大小是已经确定不能更改的了。但是我们还是能够看到有setobject的方法,可以向里面添加改变值。这是因为会在堆中在新建一个内存区域B,把原来堆内存A中的数据复制到这个堆区域B中,然后在这个新的区域B里面添加你setobject进去的值,并把栈中的指针对象MoMo指向B。这样就是说原来A的对内存值没有发生变化,但是你的指针MoMo在指向新的内存区域B之后指针对应的值已经变化了。因为B中有A的复制内容,还有最后你新添加进去(setobject)的值。
源数组是否发生了变化.NSArray更安全.不涉及到数组变化.只是读取.
4、 当前有一个数组,里面有若干重复的数据,如何去除重复的数据?(会几个写几个)
使用set集合 initWithArray:(NSArray *)arr;
或者使用for循环遍历----双循环,发现相同的数据就移除.
把数组放到可变字典之中,元素作为key,有重复,就会覆盖,最后比较两者的 count
5、 isKindOfClass、isMemberOfClass作用分别是什么?
isKindOfClass和isMemberOfClass之间的区别是:
我们可以使用isKindOfClass来确定一个对象是否是一个类的实例,或者是该类父类的实例。//BOOL值,继承链上都会返回YES
isMemberOfClass只能用来判断前者,不能用来判断后者。
6、 写出下面程序段的输出结果
NSDictionary*dict = [NSDictionary dictionaryWithObject:@"a string value"forKey:@"akey"];
NSLog(@"%@",[dict objectForKey:@"akey"]);
[dictrelease];//不应该释放---便利构造器---
结果是a string value
7、 请写出以下代码的执行结果
NSString * name = [ [ NSString alloc] init ];
name = @”Habb”;
[name release];//常量区,不应该release
内存泄露问题.----重指向,之前开辟的内存空间无法释放,内存泄露.
8、 请分别写出SEL、id的意思?
SEL选择器.------id对象类型
9、 iPhone上,不能被应用程序直接调用的系统程序是什么?
//配置PList文件可以调用Setting;
//EventKit事件添加;可以调用
// 计算器 股市 备忘录 天气 提醒事项 等关于隐私的程序
10、 以.mm为拓展名的文件里,可以包含的代码有哪些?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编译后的o文件,这个东西其实是无差别的,所以可以用。obj-c的编译器支持cpp.
Buildsetting设置编译器,按OBJECTive-C++写
11、 说说如何进行后台运行程序?
IOS4开始支持.9种情况:音乐. GPS VOIP(网络电话) 后台下载
后台网络请求
申请后台运行 :接受一个代理---EnterBackGround
– beginBackgroundTaskWithExpirationHandler:
– endBackgroundTask:
12、 sizeof和strlen的区别和联系
sizeof用来计算内存大小
strlen用来计算字符长度的
13、 sprintf,strcpy,memcpy的功能?使用上要有哪些要注意的地方
strcpy是一个字符串拷贝的函数,它的函数原型为strcpy(char*dst, const char *src);
将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为'\0',由于拷贝的长度不是由我们自己控制的,所以这个字符串拷贝很容易出错。具备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数,它的函数原型为memcpy(char *dst,const char* src, unsigned int len);
将长度为len的一段内存,从src拷贝到dst中去,这个函数的长度可控。但是会有内存叠加的问题。
sprintf是格式化函数。将一段数据通过特定的格式,格式化到一个字符串缓冲区中去。sprintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,造成溢出。
Sprint:将打印的内容输出到文件
14、 自己写函数,实现strlen功能
intstrlen(const char string[]){//注意写const,字符串只读,保证安全,无法修改串
int i=0;
while(string[i])
i++;
return i;
}
15、 写一个代码片段输入一个字符串“20130322152832”,输出一个NSDate类型的对象,打印该对象输出2013-03-22 15:28:32
NSString*str = @”20130322152832”;
//转化为NSdate
NSDateFormatter*formatter =[ [NSDateFormatter alloc]init];
[formattersetDateFormatter: @”yyyyMMddhhmmss” ];
NSDate*date = [formatter dateFromString:str];
//转化为字符串
[formatter setDateFormatter: @”yyyy-MM-dd-hh-mm-ss” ];
NSString*str_last = [formatter stringFromdate:date];
16、 找错误
a:void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}// \0放不下,打印的时候字符串结束位置不确定
b:voidGetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}//--------没有free代码(释放)
voidTest( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, "hello" );
printf( str );
-------free(str);
}
17、 用变量a写出以下定义
a、一个整型数 int a
b、一个指向整型数的指针 int *a
c、一个指向指针的指针,它指向的指针是指向一个整型数 int ** a
d、一个有10个整型数的数组 int a[10]
e、一个有10个指针的数组,该指针是指向一个整型数的int *a[10]
f、一个指向有10个整型数数组的指针int(*a)[10]----宣布a是个指针变量
g、一个指向函数的指针,该函数有一个整型参数,并返回一个整型数
int(*a)(int );
将函数的首地址赋给a