iOS 使用 @autoreleasepool 内存 差异小疑问

2020-08-13  本文已影响0人  天空中的球

在一个 iOS 开发群中,看到一个小伙伴的疑问(如下图),自己测试了下使用 @autoreleasepool 内存显示的不同点

创建10000 个 UIView 时 12.3 MB
创建 10000 个 NSObject 对象时 9.4 MB
正常情况的 9.4MB
一、用 @autoreleasepool 创建10000 个 NSObject 时,干了啥
@autoreleasepool {
    id obj = [[NSObject alloc] init];
}

转换成 ==> 编译器的模拟代码:

id pool = objc_autoreleasePoolPush();
id = objc_msgSend(NSObject,@selector(alloc));
objc_msgSend(obj,@selector(init));
objc_autorelease(obj);
objc_autoreleasePoolPop(pool);
二、用 @autoreleasepool 创建10000 个 UIView 时为啥 比 NSObject 多的疑惑
UIView 和 NSObject 分配的内存大小
从 UIView 和 NSObject 分配的内存大小 大致也可以说明, 为啥 UIView 创建的 对象占用会比 NSObject 大这么多的。
三、@autoreleasepool 到底起作用没的啊 ?

在此刻是没有起作用的,此时我们可以回顾下@autoreleasepool 的作用是:
可以控制应用程序的内存峰值(指应用程序在某个特定时段内的最大内存用量),使得不会处于过高状态!

PS : 根据Using Autorelease Pool Blocks,使用场景如下:

四、总结点

之前是对于这两个有存在理解误差,才这样的。

参考
上一篇下一篇

猜你喜欢

热点阅读