好的ios面试题

iOS 面试题

1.堆和栈的区别:(一般的c/c++程序占用的内存分为下几个部分)

栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。(速度较快,程序员无法控制)

堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束的时候可能由OS(操作系统)回收。(速度较慢,产生内存碎片,用着方便)

全局区(静态区Static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量在相邻的另一块区域。程序结束后由系统释放。

文字常量区:常量字符串就是放在这里。程序结束后由系统释放。

程序代码区:存放函数的二进制代码。


2.为什么说Objective-C 是一门动态的语言(c/c++、c#、java饰静态语言)

Objective-c可以通过Runtime这个运行时机制,在运行时动态的添加变量、方法、类等

3.为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?

weak:会在所属的对象遭到销毁时而清空。为了避免循环引用造成内存泄露。

delegate协议里边的方法主要是操作相关      dataSource是数据源协议里边跟内容有关

block和delegate都可以通知外边。block更轻型,使用简单,能够直接访问上下文,这样类中不需要存储林是数据,使用block的代码通常会放在同一地方,这样代码也更连贯。delegate更重要一些,需要实现接口,他的方法分离开来,很多时候需要存储一些临时数据不易读。但是block稍微使用不好就回出现循环引用的问题导致对象释放不了。而delegate的方法是分开的不会引用上下文,因此会更安全一些。用__weak去解决循环引用的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 越来越多的人在学习iOS课程,起初我自己是通过国内的一些网站学习,但是视频教程更新慢。后来在Youtube上看视频...
    东东隆东抢阅读 9,659评论 0 9
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 9,171评论 2 37
  • 面试题9 1.描述应用程序的启动顺序。 2.为什么很多内置类如UITableViewControl的delegat...
    啧啧啧_野兽阅读 6,632评论 0 26
  • 平安夜 虽然我对西方的节日无感 但我却期盼平安幸福 平安 平安 一切安好 这是我最简单美好的心愿 节日为纸 平安为...
    意中人ABC阅读 2,548评论 0 0
  • 一朵花开在 我理想的梦境 那里没有春夏秋冬的更始 那里没有生死 别离 你问:那是天堂吗? 不是 那是我梦的方向 拼...
    萧路遥阅读 1,495评论 17 5