美文网首页
OC-重要知识点个人记录

OC-重要知识点个人记录

作者: 我是花草阿 | 来源:发表于2017-05-06 11:51 被阅读16次

    把OC中容易忘记、比较关键、面试常问、工作常用的一些知识点记录下来

    property属性的参数:

    • weak:弱引用,
    • strong:强引用,一般对象适用strong,对对象持有,自身销毁时,所持有对象
    • retain: 保留对象 就在setter 和 getter方法中加入一些内存管理的代码,当属性是一个普通OC对象的时候,使用retain
    • assign: 直接赋值,不生成内存管理代码,属性是一个基本数据类型的时候,使用assign
    • copy: copy 复制对象副本,NSString 使用copy
    • atomic: 原子(默认),会生成线程安全的代码,速度慢,在调用setter方法时进行加锁操作
    • nonatomic: 非原子,不会生成线程安全的代码,速度快
    • readonly:只有setter方法,无getter方法
    • readwrite:可读可写,生成getter 与 setter方法

    id类型:

    万能型对象指针类型,动态类型,缺点是不会在编译时检查错误,优点是提供对象的多态特性

    instancetype类型:

    相对于id类型,它会自动进行类型检查,如果不一致就会报一个警告,instancetype 只可以作为返回类型

    内存管理:

    • 栈: 局部变量:定义在方法或函数内部变量,由系统管理
    • 堆:动态存储区,由程序员进行管理
    • 野指针:只初始化了没有赋值或者指向的指针,或者对象被提前释放了的指针,访问野指针会造成程序崩溃
    • 空指针:指向nil 的指针

    手动管理内存MRC:

    谁调用new,alloc,retain,copy,multableCopy初始化,谁就要调用对应的release或autorelease;需要一个对象时就要retain,不需要一个对象了就要release

    • 循环引用: 为避免循环引用,有一个对象或者数据要使用assign参数,必须有一方是弱引用
    • autorelease: 自动释放池,延长对象生命周期,在自动释放池销毁时会对所有池中的的对象进行release操作
    • release:销毁对象

    自动引用计数ARC:

    自动管理内存,除了使用alloc,copy,retain时,要自己使用release和autorelease释放对象,其他都不需要你来管理内存

    • 强指针:默认所有的指针都是强指针
      只要是有强指针指向一个对象,那么这个对象就不会被释放
      只要是没有强指针指向一个对象,那么这个对象就被立即回收
      _strong 强指针标示,但是默认所有指针都是强指针,所以他没有用
    • 弱指针:弱指针指向的对象不影响对象回收
      注意:不要用弱指针指向一个刚刚创建出来的对象

    cotogory分类:

    扩展已有类的功能,添加私有的成员变量,属性和方法.

    分类中属性不能生成setter和getter方法的实现方法,只有声明方法,也不会生成实现成员变量,不能添加和已有类相同的方法名

    SEL:

    一种数据类型,代表方法签名,通过SEL可以找到对象的对应的方法

    使用关键字:@selector(方法名称)生成 SEL,target: action: 方法用到了

    block:

    代码块,一种用来封装代码的数据类型,可以使用在方法内部

    作为函数参数类型的格式:返回值类型(^)(形参列表)

    • 在block 中可以访问局部变量的

    • 默认在block内部不能修改局部变量的值
      如果想修改局部变量的值,要再定义这个变量的时候,在前面加上__block

    • block需要使用copy属性:block在栈里面的,block内部要使用本地变量,那么必须在堆里面操作,copy是在堆内的。

    protocol: 协议:

    可以声明协议类型变量,协议分为required方法和optional方法,一个类可以同时遵循多个协议

    委托代理机制:

    在委托者中声明一个协议,然后创建一个delegate属性,被委托者遵守委托者的协议,然后实现委托者的协议,还要让被委托者成为委托者的代理

    深浅复制:

    • 浅复制: 不会产生一个新的对象,只拷贝对象指针
    • 深复制: 会产生一个新的对象,完全拷贝,复制属性
      对于不可变的对象使用copy,是浅复制,使用mutablecopy是深复制
      对于可变对象使用copy或者mutablecopy都是深复制

    相关文章

      网友评论

          本文标题:OC-重要知识点个人记录

          本文链接:https://www.haomeiwen.com/subject/sjvetxtx.html