美文网首页
iOS 中的内存管理优化

iOS 中的内存管理优化

作者: child_cool | 来源:发表于2018-08-02 11:31 被阅读21次

闭包

  • 外面将强引用对象转化为弱引用指针,防止循环引用
  • block内弱引用转换成strong强引用指针,防止多线程和ARC环境下弱引用可能会被随时释放的问题
__weak MyViewController *wself = self;
self.completionHandler = ^(NSInteger result) {
    __strong __typeof(wself) sself = wself; // 强引用一次
    [sself.property removeObserver: sself forKeyPath:@"pathName"];
};

降低内存峰值

  • 延时加载,在使用的时候在进行加载,避免初次运行程序对内存的消耗
lazy var goodsImageView: UIImageView = {
        let goodsImageView = UIImageView()
        return goodsImageView
    }()
懒方法
let data = 1...3
let result = data.lazy.map {
    (i: Int) -> Int in
    print("正在处理 \(i)")
    return i * 2
}

print("准备访问结果")
for i in result {
    print("操作后结果为 \(i)")
}

print("操作完毕")

// 准备访问结果
// 正在处理 1
// 操作后结果为 2
// 正在处理 2
// 操作后结果为 4
// 正在处理 3
// 操作后结果为 6
// 操作完毕
  • 图片的读取方式
    • 如果频繁读取小文件,用它就只需要读取一次就好,自动缓存图片,但是缺点就是如果使用大图片会常驻内存,对于降低内存峰值是不利的
UIImage(named: name)
* 大图片,使用完就释放,不需要进行缓存
UIImage(contentsOfFile: path)
  • NSData & 内存映射文件
    • 第二种比第一个多一个Options,第二种方式是创建了一个内存映射文件,把内容放在虚拟内存中,只有读取操作的时候才会读到相对应页的物理内存页中,是读取大文件时适合第二种方式
public init?(contentsOfFile path: String)
public init(contentsOfFile path: String, options readOptionsMask: NSDataReadingOptions) throws
  • AutoReleasePool
    • For循环中添加autoreleasepool,这样就可以保证每次迭代完毕一次就可以释放点内存
func loadBigData() {
    for i in 1...10000 {
        autoreleasepool {
            let data = NSData.dataWithContentsOfFile(
                path, options: nil, error: nil)
        }
    }
}
  • 单例的使用个数限制,太多会浪费很多的资源
  • 栈的内存分配

相关文章

  • iOS 性能优化内存优化学习

    iOS APP渲染性能优化iOS性能优化之内存(memory)优化iOS内存和性能优化

  • iOS-内存管理、性能优化、离屏渲染相关

    本篇涵盖程序内存管理、优化相关、离屏渲染相关等. 1.深入OC的内存管理2.iOS内存、缓存及存储优化3.Xcod...

  • iOS APP内存优化记录

    iOS APP内存优化记录iOS APP内存优化记录

  • iOS 中的内存管理优化

    闭包 外面将强引用对象转化为弱引用指针,防止循环引用 block内弱引用转换成strong强引用指针,防止多线程和...

  • 2019-03-01

    虚拟内存 物理内存 先弄清楚这里的学问,再来谈 iOS 内存管理与优化 先弄清楚这里的学问,再来谈 iOS 内存管...

  • iOS 性能优化 - Allocations分析内存分配

    iOS 性能优化 - Allocations分析内存分配 iOS 性能优化 - Allocations分析内存分配

  • 内存优化

    iOS 内存管理之四:内存优化 转自:https://blog.boolchow.com/2016/04/04/M...

  • iOS 内存管理 部分三

    主要讲解日常开发中定时器的选择; iOS 内存管理 部分一iOS 内存管理 部分二iOS 内存管理 部分三i...

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

网友评论

      本文标题:iOS 中的内存管理优化

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