AutoreleasePool

如何调试

示例代码:

// 1. 声明方法
extern void _objc_autoreleasePoolPrint(void);

// 2. 打印信息
_objc_autoreleasePoolPrint();

案例

由于使用autoreleasepool需要autorelease方法
需要将Build Settings -> Objective-C Automatic Reference Counting设置为NO

示例代码1:

@autoreleasepool {
    NSObject *object_1 = [[[NSObject alloc] init] autorelease];
    NSObject *object_2 = [[[NSObject alloc] init] autorelease];
    NSObject *object_3 = [[[NSObject alloc] init] autorelease];
    NSObject *object_4 = [[[NSObject alloc] init] autorelease];
    NSObject *object_5 = [[[NSObject alloc] init] autorelease];

    _objc_autoreleasePoolPrint();
}

运行结果:

##############
AUTORELEASE POOLS for thread 0x1000cfd40
6 releases pending.
[0x101003000]  ................  PAGE  (hot) (cold)
[0x101003038]  ################  POOL 0x101003038
[0x101003040]       0x10065f620  NSObject
[0x101003048]       0x10065bf80  NSObject
[0x101003050]       0x10065e5b0  NSObject
[0x101003058]       0x10065a850  NSObject
[0x101003060]       0x10065b2c0  NSObject
##############

示例代码2:

@autoreleasepool {
    NSObject *object_1 = [[[NSObject alloc] init] autorelease];
    NSObject *object_2 = [[[NSObject alloc] init] autorelease];
    _objc_autoreleasePoolPrint();
    @autoreleasepool {
        NSObject *object_3 = [[[NSObject alloc] init] autorelease];
        NSObject *object_4 = [[[NSObject alloc] init] autorelease];
        _objc_autoreleasePoolPrint();
    }
    NSObject *object_5 = [[[NSObject alloc] init] autorelease];
    _objc_autoreleasePoolPrint();
}

运行结果:

##############
AUTORELEASE POOLS for thread 0x1000cfd40
3 releases pending.
[0x100806000]  ................  PAGE  (hot) (cold)
[0x100806038]  ################  POOL 0x100806038
[0x100806040]       0x1005b6750  NSObject
[0x100806048]       0x1005b4a00  NSObject
##############
##############
AUTORELEASE POOLS for thread 0x1000cfd40
6 releases pending.
[0x100806000]  ................  PAGE  (hot) (cold)
[0x100806038]  ################  POOL 0x100806038
[0x100806040]       0x1005b6750  NSObject
[0x100806048]       0x1005b4a00  NSObject
[0x100806050]  ################  POOL 0x100806050
[0x100806058]       0x1005b4f00  NSObject
[0x100806060]       0x1005b2160  NSObject
##############
##############
AUTORELEASE POOLS for thread 0x1000cfd40
4 releases pending.
[0x100806000]  ................  PAGE  (hot) (cold)
[0x100806038]  ################  POOL 0x100806038
[0x100806040]       0x1005b6750  NSObject
[0x100806048]       0x1005b4a00  NSObject
[0x100806050]       0x1007000b0  NSObject
##############

示例代码3:

@autoreleasepool {
    for (int i = 0; i < 800; ++i) {
        NSObject *object = [[[NSObject alloc] init] autorelease];
    }
    _objc_autoreleasePoolPrint();
}

运行结果:

##############
AUTORELEASE POOLS for thread 0x1000cfd40
801 releases pending.
[0x100804000]  ................  PAGE (full)  (cold)
[0x100804038]  ################  POOL 0x100804038
[0x100804040]       0x10053be60  NSObject
[0x100804048]       0x1005390c0  NSObject
[0x100804050]       0x100538d80  NSObject
...
[0x100804fe8]       0x100543b70  NSObject
[0x100804ff0]       0x100543b80  NSObject
[0x100804ff8]       0x100543b90  NSObject
[0x10080f000]  ................  PAGE  (hot) 
[0x10080f038]       0x100543ba0  NSObject
[0x10080f040]       0x100543bb0  NSObject
[0x10080f048]       0x100543bc0  NSObject
...
[0x10080f960]       0x100544df0  NSObject
[0x10080f968]       0x100544e00  NSObject
[0x10080f970]       0x100544e10  NSObject
##############
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值