美文网首页
内存管理与block

内存管理与block

作者: 健健锅 | 来源:发表于2019-01-11 16:12 被阅读6次

/*
1. 自己生成,自己持有, alloc , new ,copy, mutableCopy
2.非自己生成的也能持有 [NSMutableArray array] 不持有对象 通过retain 可持有

 retain count :采用散列表(引用计数表)来管理引用计数器,这样可以查询引用的对象地址
 
 autorelease : runloop 生成NSAutoreleasePool  ,加入pool runloop 结束 pool 销毁
 在pool未销毁的过程中,大量产生autorelese对象,只要pool不释放,如大量读取图片
 采用@autoreleasepool{} 及时释放
 
 autorelease 的实现: NSAutoreleasePool 是一个连接列表 同NSMutableArray 相同
        AutoreleasePoolPage push pop
 
 
 二, 所有权修饰符
    对象类型,就是指NSobject 的类的指针   id 类型 是对象类型 隐藏类名称部分
 __strong 默认的 在变量作用于以及赋值
 __weak 不持有对象 使用weak 是 查询对象是否存在 不持有时直接值nil 不产生野指针
 __unsafe_unretained 同样修饰对象,不持有对象但是不自动置nil 效率高点相对于weak
 
 __autoreleasing :方法的参数 传递 NSError的对象指针,而不是返回值,这样 对象的指针直接被autorelease 修饰,直接加入autoreleasePool   方法中不需要管理参数error的引用计数,这里会生成一个__autoreleasing的临时变量,所以出现了实参传递过程中不是同一个对象。
    一般方法传递参数对象 为值传递,二nserror 为对象指针传递,这样可根据对象指针的指针去拿到对象的指针去修改对象
 https://blog.csdn.net/wnnvv/article/details/81144219
 https://www.jianshu.com/p/6f284bd7cf0a
 
 main 函数中的 @autoreleasepool 将主线程的对象加入到 runloop中,主线程销毁 那么销毁相应的UIApplicationMain
 
 
 三,
  1. init 方法初始化alloc方法返回的对象,然后原封不懂得返给调用方
     https://www.jianshu.com/p/92e095225cea
  2, id 和 void* 的转换 (__brige的原理)
  3.数组
 四,ARC 的实现
       ARC 是有编译器llvm 和runtime 共同完成
   __weak 修饰符变量所引用的对象会被注册到autoreleasepool 中,那么pool 结束之前可以正常适应,但是每次是使用__weak ,该对象都会注册到 pool,的对象也会大量增加,使用之前最好strong一下
          1.__weak 修饰符所引用的对象被废弃是,z将自动置空,
          2.使用weak的对象时,注册到autoreleasepool 中
 */

/*
 block : 带有自动变量值的匿名函数
 ^ 返回值类型(参数){表达式}  ^int(int k){ return k + 1}
 
 block 捕获外部变量的值,不能被修改  如果为NSMutableArray 可以对数组操作,但是不等对数组array 赋值
  因为截获的是这个对象结构体
 不能捕获C语言数组  const char text[] = "sdsd"  修改成 const char *text[] = "sdsd"
 
 */

相关文章

  • Block内存管理实例分析

    Block内存管理实例分析 Block内存管理实例分析

  • Block内存管理

    对block自身内存的管理 对于block,有两个内存管理方法:Block_copy, Block_release...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • Block

    参考:Apple Block 源码Objective-C高级编程 iOS与OS X多线程和内存管理 Block与函...

  • Block 使用总结

    Block 内存管理: Block 内存主要分派到 NSGlobalBlock(data area),NSMall...

  • 内存管理与block

    /*1. 自己生成,自己持有, alloc , new ,copy, mutableCopy2.非自己生成的也能持...

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • Block

    一、Block本质 二、 BlocK截获变量 三、__block 修饰变量 四、Block内存管理 五、Block...

  • Block

    Block介绍 截获变量 __block修饰符 Block的内存管理 Block的循环引用 一、Block介绍 1...

网友评论

      本文标题:内存管理与block

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