美文网首页
简述OC中内存管理机制

简述OC中内存管理机制

作者: Zhui_Do | 来源:发表于2017-03-30 13:40 被阅读13次

    简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?并区别strong(强引用)、 weak(弱引用)?什么情况使用copy,assign,和retain?
    管理机制:使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息 时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。
    retain(引用计数加1)->release(引用计数减1)
    alloc(申请内存空间)->dealloc(释放内存空间)
    readwrite: 表示既有getter,也有setter (默认)
    readonly: 表示只有getter,没有setter
    nonatomic:不考虑线程安全
    atomic:线程操作安全 (默认)
    线程安全情况下的setter和getter:

    • (NSString) value {
      @synchronized(self) {
      return [[_value retain] autorelease];
      }}
      (void) setValue:(NSString
      )aValue {
      @synchronized(self) {
      [aValue retain];
      [_value release];
      _value = aValue;
      } }
      retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
      assign: 简单赋值,不更改索引计数 (默认)
      copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝 copy:内容拷贝)
      strong:(ARC下的)和(MRC)retain一样 (默认)
      weak:(ARC下的)和(MRC)assign一样, weak当指向的内存释放掉后自动nil化,防止野指针
      unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

    相关文章

      网友评论

          本文标题:简述OC中内存管理机制

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