好的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面试题)