iOS 面试题总结
$[timeformat('2018-02-28T15:16:55+08:00')]

基础篇

内存管理 :assign copy strong weak...

  • 简述OC中内存管理机制,与retain配对使用的方法是dealloc还是release,为什么?

管理机制: 使用了一种叫做 引用计数 的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息 时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存

  • 修饰词的作用

    • retain(引用计数加1)->release(引用计数减1)
    • alloc(申请内存空间)->dealloc(释放内存空间)
    • readwrite: 表示既有getter,也有setter (默认)
    • readonly: 表示只有getter,没有setter
    • nonatomic:不考虑线程安全
    • atomic:线程操作安全 (默认)
    • retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
    • assign: 简单赋值,不更改索引计数 (默认)
    • copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝 copy:内容拷贝)
    • strong:(ARC下的)和(MRC)retain一样 (默认)
    • weak:(ARC下的)和(MRC)assign一样, weak当指向的内存释放掉后自动nil化,防止野指针
    • unsafe_unretained 声明一个弱引用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

.类变量的@protected ,@private,@public,@package,声明各有什么含义?