1 / 59
文档名称:

ios面试题.docx

格式:docx   大小:63KB   页数:59页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ios面试题.docx

上传人:86979448 2017/12/22 文件大小:63 KB

下载得到文件列表

ios面试题.docx

相关文档

文档介绍

文档介绍:1. 回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init]; 此时person 的retainCount的值是1 = per;
 时,如果是assign,person的 retainCount的值不变,仍为1 若是:retain person的retainCount的值加1,变为2
若是:copy person的retainCount值不变,仍为1
2、这段代码有什么问题吗: ***@implementation Person
- (void)setAge:(int)newAge {
= newAge; }
***@end
会死循环,会重复调用自己! 改为_age即可;
并且书写不规范:setter方法中的newAge应该为age
3、这段代码有什么问题,如何修改
for (int i = 0; i < someLargeNumber; i++) { NSString *string = @”Abc”;
string = [string lowercaseString];
string = [string stringByAppendingString:@"xyz"]; NSLog(@“%@”, string);
}
会出现内存泄露
修改之后:
for(int i = 0; i<1000;i++){
NSAutoreleasePool * pool1 = [[NSAutoreleasePool alloc] init]; NSString *string = @"Abc";
string = [string lowercaseString];
string = [string
stringByAppendingString:@"xyz"]; NSLog(@"%@",string);
//释放池
[pool1 drain]; }
延伸:堆栈的区别:
(1)管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生 memory leak。(2)申请大小:能从栈获得的空间较小,堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。(3)碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出(4)分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由 alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。(5)分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持
:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。 4、写一个便利构造器
+(id)Person {
Person *person=[Person alloc]init];
return [person autorelease]; 备注:ARC时不用 autorelease
}
5、截取字符串”20 | ,”|”字符前面和后面的数据,分别输出它们。
􏵦􏵦 NSString * str = @"20 | ";
NSArray *array = [ponentsSeparatedByString:@"|"]; //这是分别输出的截取后的字符串
for (int i = 0; i<[array count]; ++i) { NSLog(@"%d=%@",i,[array objectAtIndex:i]);
}
6、用obj-c写一个冒泡排序-(void)mySort:(NSMutableArray *)mutArray {
id tmpObj = nil;
unsigned long flag = -1;//flag :最大脚标 while (flag > 0) {
int k = flag;
flag = 0;
for (int j = 0 ; j < k ; j++) {
int order = NSOrderedAscending;// 或 NSOrderedDescending
if ([[mutArray[j] des