ios基础知识面试题.pdfVIP

  • 3
  • 0
  • 约4.71万字
  • 约 50页
  • 2021-11-12 发布于广东
  • 举报
1. 回答person的retainCount值,并解释为什么 Person * per = [[Person alloc] init]; 此时 person 的retainCount的值是 1 self.person = per; 在 self.person 时,如果是 assign,person的 retainCount 的值不变 ,仍为 1 若是 :retain person的retainCount的 值加 1,变为 2 若是 :copy person的retainCount值不 变 ,仍为 1 2、 这段代码有什么问题吗 : @implementation Person - (void)setAge:(int)newAge { self.age = newAge; } @end 会死循环 ,会重复调用自己 !self.age 改为_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; i1000;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)分配效率

文档评论(0)

1亿VIP精品文档

相关文档