0%

查看autoreleasepool的状态

查看NSAutoreleasePool 中 autorelease对象的状况,可以使用运行时系统中的函数(lldb)po _objc_autoreleasePoolPrint();

测试的源代码如下:

执行断点1处的代码,日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
2020-01-27 19:22:37.241288+0800 NSAutoReleasePool测试[7028:191376] 执行断点1处的代码。
(lldb) po _objc_autoreleasePoolPrint();
objc[7028]: ##############
objc[7028]: AUTORELEASE POOLS for thread 0x11a0615c0
objc[7028]: 86 releases pending.
objc[7028]: [0x7ff577009000] ................ PAGE (hot) (cold)
objc[7028]: [0x7ff577009038] ################ POOL 0x7ff577009038
objc[7028]: [0x7ff577009040] 0x60800002d3a0 __NSCFString
objc[7028]: [0x7ff577009048] ################ POOL 0x7ff577009048
objc[7028]: [0x7ff577009050] ################ POOL 0x7ff577009050
objc[7028]: [0x7ff577009058] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009060] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009068] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009070] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009078] 0x604000028d20 __NSArrayI
objc[7028]: [0x7ff577009080] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009088] 0x604000071c40 __NSCFDictionary
objc[7028]: [0x7ff577009090] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009098] 0x604000049e40 __NSArrayM
objc[7028]: [0x7ff5770090a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770090a8] 0x7ff576604080 UIStatusBarWindow
objc[7028]: [0x7ff5770090b0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090b8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770090c0] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090c8] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090d0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090d8] 0x604000048970 __NSArrayM
objc[7028]: [0x7ff5770090e0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090e8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090f0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770090f8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009100] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009108] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009110] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009118] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009120] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009128] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009130] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009138] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009140] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009148] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009150] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009158] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009160] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009168] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009170] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009178] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009180] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009188] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009190] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009198] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091a0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091a8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091b0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091b8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091d0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091d8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770091f0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091f8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009200] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009208] 0x7ff578800540 UITouch
objc[7028]: [0x7ff577009210] 0x604000049420 __NSArrayM
objc[7028]: [0x7ff577009218] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009220] 0x60400008de80 __NSMallocBlock__
objc[7028]: [0x7ff577009228] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009230] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009238] 0x60800010ee80 NSXPCConnection
objc[7028]: [0x7ff577009240] 0x60400008de30 __NSXPCInterfaceProxy__UIKeyboardArbitration
objc[7028]: [0x7ff577009248] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009250] 0x10ecc4a58 __NSGlobalBlock__
objc[7028]: [0x7ff577009258] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009260] 0x60800002ef60 __NSArrayI
objc[7028]: [0x7ff577009268] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009270] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009278] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009280] 0x6040000130f0 __NSDate
objc[7028]: [0x7ff577009288] 0x604000360cc0 __NSCFTimer
objc[7028]: [0x7ff577009290] 0x604000029440 __NSArrayI
objc[7028]: [0x7ff577009298] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b8] 0x60400002abc0 __NSArrayI
objc[7028]: [0x7ff5770092c0] 0x60400002aaa0 __NSArrayI
objc[7028]: [0x7ff5770092c8] 0x6040000132d0 __NSSingleObjectArrayI
objc[7028]: [0x7ff5770092d0] 0x60800010edf0 UITouchesEvent
objc[7028]: [0x7ff5770092d8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092e0] 0x604000026f00 AppDelegate
objc[7028]: ##############
0x75269231ba3900d2

执行断点2处的代码,日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
2020-01-27 19:24:29.654753+0800 NSAutoReleasePool测试[7028:191376] 执行断点2处的代码。
2020-01-27 19:24:29.654806+0800 NSAutoReleasePool测试[7028:191487] XPC connection interrupted
(lldb) po _objc_autoreleasePoolPrint();
objc[7028]: ##############
objc[7028]: AUTORELEASE POOLS for thread 0x11a0615c0
objc[7028]: 87 releases pending.
objc[7028]: [0x7ff577009000] ................ PAGE (hot) (cold)
objc[7028]: [0x7ff577009038] ################ POOL 0x7ff577009038
objc[7028]: [0x7ff577009040] 0x60800002d3a0 __NSCFString
objc[7028]: [0x7ff577009048] ################ POOL 0x7ff577009048
objc[7028]: [0x7ff577009050] ################ POOL 0x7ff577009050
objc[7028]: [0x7ff577009058] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009060] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009068] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009070] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009078] 0x604000028d20 __NSArrayI
objc[7028]: [0x7ff577009080] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009088] 0x604000071c40 __NSCFDictionary
objc[7028]: [0x7ff577009090] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009098] 0x604000049e40 __NSArrayM
objc[7028]: [0x7ff5770090a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770090a8] 0x7ff576604080 UIStatusBarWindow
objc[7028]: [0x7ff5770090b0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090b8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770090c0] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090c8] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090d0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090d8] 0x604000048970 __NSArrayM
objc[7028]: [0x7ff5770090e0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090e8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090f0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770090f8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009100] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009108] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009110] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009118] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009120] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009128] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009130] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009138] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009140] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009148] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009150] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009158] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009160] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009168] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009170] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009178] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009180] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009188] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009190] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009198] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091a0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091a8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091b0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091b8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091d0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091d8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770091f0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091f8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009200] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009208] 0x7ff578800540 UITouch
objc[7028]: [0x7ff577009210] 0x604000049420 __NSArrayM
objc[7028]: [0x7ff577009218] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009220] 0x60400008de80 __NSMallocBlock__
objc[7028]: [0x7ff577009228] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009230] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009238] 0x60800010ee80 NSXPCConnection
objc[7028]: [0x7ff577009240] 0x60400008de30 __NSXPCInterfaceProxy__UIKeyboardArbitration
objc[7028]: [0x7ff577009248] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009250] 0x10ecc4a58 __NSGlobalBlock__
objc[7028]: [0x7ff577009258] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009260] 0x60800002ef60 __NSArrayI
objc[7028]: [0x7ff577009268] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009270] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009278] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009280] 0x6040000130f0 __NSDate
objc[7028]: [0x7ff577009288] 0x604000360cc0 __NSCFTimer
objc[7028]: [0x7ff577009290] 0x604000029440 __NSArrayI
objc[7028]: [0x7ff577009298] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b8] 0x60400002abc0 __NSArrayI
objc[7028]: [0x7ff5770092c0] 0x60400002aaa0 __NSArrayI
objc[7028]: [0x7ff5770092c8] 0x6040000132d0 __NSSingleObjectArrayI
objc[7028]: [0x7ff5770092d0] 0x60800010edf0 UITouchesEvent
objc[7028]: [0x7ff5770092d8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092e0] 0x604000026f00 AppDelegate
objc[7028]: [0x7ff5770092e8] ################ POOL 0x7ff5770092e8
objc[7028]: ##############
0x75269231ba3900d2

执行断点3处的代码,日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
2020-01-27 19:27:07.529438+0800 NSAutoReleasePool测试[7028:191376] 执行断点3处的代码。
(lldb) po _objc_autoreleasePoolPrint();
objc[7028]: ##############
objc[7028]: AUTORELEASE POOLS for thread 0x11a0615c0
objc[7028]: 88 releases pending.
objc[7028]: [0x7ff577009000] ................ PAGE (hot) (cold)
objc[7028]: [0x7ff577009038] ################ POOL 0x7ff577009038
objc[7028]: [0x7ff577009040] 0x60800002d3a0 __NSCFString
objc[7028]: [0x7ff577009048] ################ POOL 0x7ff577009048
objc[7028]: [0x7ff577009050] ################ POOL 0x7ff577009050
objc[7028]: [0x7ff577009058] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009060] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009068] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009070] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009078] 0x604000028d20 __NSArrayI
objc[7028]: [0x7ff577009080] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009088] 0x604000071c40 __NSCFDictionary
objc[7028]: [0x7ff577009090] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009098] 0x604000049e40 __NSArrayM
objc[7028]: [0x7ff5770090a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770090a8] 0x7ff576604080 UIStatusBarWindow
objc[7028]: [0x7ff5770090b0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090b8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770090c0] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090c8] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090d0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090d8] 0x604000048970 __NSArrayM
objc[7028]: [0x7ff5770090e0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090e8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090f0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770090f8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009100] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009108] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009110] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009118] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009120] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009128] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009130] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009138] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009140] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009148] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009150] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009158] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009160] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009168] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009170] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009178] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009180] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009188] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009190] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009198] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091a0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091a8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091b0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091b8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091d0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091d8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770091f0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091f8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009200] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009208] 0x7ff578800540 UITouch
objc[7028]: [0x7ff577009210] 0x604000049420 __NSArrayM
objc[7028]: [0x7ff577009218] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009220] 0x60400008de80 __NSMallocBlock__
objc[7028]: [0x7ff577009228] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009230] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009238] 0x60800010ee80 NSXPCConnection
objc[7028]: [0x7ff577009240] 0x60400008de30 __NSXPCInterfaceProxy__UIKeyboardArbitration
objc[7028]: [0x7ff577009248] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009250] 0x10ecc4a58 __NSGlobalBlock__
objc[7028]: [0x7ff577009258] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009260] 0x60800002ef60 __NSArrayI
objc[7028]: [0x7ff577009268] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009270] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009278] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009280] 0x6040000130f0 __NSDate
objc[7028]: [0x7ff577009288] 0x604000360cc0 __NSCFTimer
objc[7028]: [0x7ff577009290] 0x604000029440 __NSArrayI
objc[7028]: [0x7ff577009298] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b8] 0x60400002abc0 __NSArrayI
objc[7028]: [0x7ff5770092c0] 0x60400002aaa0 __NSArrayI
objc[7028]: [0x7ff5770092c8] 0x6040000132d0 __NSSingleObjectArrayI
objc[7028]: [0x7ff5770092d0] 0x60800010edf0 UITouchesEvent
objc[7028]: [0x7ff5770092d8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092e0] 0x604000026f00 AppDelegate
objc[7028]: [0x7ff5770092e8] ################ POOL 0x7ff5770092e8
objc[7028]: [0x7ff5770092f0] 0x60400004a770 __NSArrayI
objc[7028]: ##############
0x75269231ba3900d2

执行断点4处的代码,日志如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
2020-01-27 19:28:45.777438+0800 NSAutoReleasePool测试[7028:191376] 执行断点4处的代码。
(lldb) po _objc_autoreleasePoolPrint();
objc[7028]: ##############
objc[7028]: AUTORELEASE POOLS for thread 0x11a0615c0
objc[7028]: 86 releases pending.
objc[7028]: [0x7ff577009000] ................ PAGE (hot) (cold)
objc[7028]: [0x7ff577009038] ################ POOL 0x7ff577009038
objc[7028]: [0x7ff577009040] 0x60800002d3a0 __NSCFString
objc[7028]: [0x7ff577009048] ################ POOL 0x7ff577009048
objc[7028]: [0x7ff577009050] ################ POOL 0x7ff577009050
objc[7028]: [0x7ff577009058] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009060] 0x60800023fca0 CAContextImpl
objc[7028]: [0x7ff577009068] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009070] 0x604000027500 CAContextImpl
objc[7028]: [0x7ff577009078] 0x604000028d20 __NSArrayI
objc[7028]: [0x7ff577009080] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009088] 0x604000071c40 __NSCFDictionary
objc[7028]: [0x7ff577009090] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009098] 0x604000049e40 __NSArrayM
objc[7028]: [0x7ff5770090a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770090a8] 0x7ff576604080 UIStatusBarWindow
objc[7028]: [0x7ff5770090b0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090b8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770090c0] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090c8] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff5770090d0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090d8] 0x604000048970 __NSArrayM
objc[7028]: [0x7ff5770090e0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090e8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770090f0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770090f8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009100] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009108] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009110] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009118] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009120] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009128] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009130] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009138] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009140] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009148] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009150] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009158] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009160] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009168] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009170] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009178] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff577009180] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009188] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009190] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009198] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091a0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091a8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091b0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091b8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091c8] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091d0] 0x60c0000f7e00 _UIApplicationCanvas
objc[7028]: [0x7ff5770091d8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e0] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff5770091e8] 0x604000046990 __NSArrayM
objc[7028]: [0x7ff5770091f0] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff5770091f8] 0x60c0000cbb40 UIApplicationSceneSettings
objc[7028]: [0x7ff577009200] 0x7ff578801260 UIScreen
objc[7028]: [0x7ff577009208] 0x7ff578800540 UITouch
objc[7028]: [0x7ff577009210] 0x604000049420 __NSArrayM
objc[7028]: [0x7ff577009218] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009220] 0x60400008de80 __NSMallocBlock__
objc[7028]: [0x7ff577009228] 0x604000013130 __NSSingleObjectSetI
objc[7028]: [0x7ff577009230] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009238] 0x60800010ee80 NSXPCConnection
objc[7028]: [0x7ff577009240] 0x60400008de30 __NSXPCInterfaceProxy__UIKeyboardArbitration
objc[7028]: [0x7ff577009248] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009250] 0x10ecc4a58 __NSGlobalBlock__
objc[7028]: [0x7ff577009258] 0x60800002ea80 NSXPCInterface
objc[7028]: [0x7ff577009260] 0x60800002ef60 __NSArrayI
objc[7028]: [0x7ff577009268] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009270] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff577009278] 0x7ff57880aeb0 UIView
objc[7028]: [0x7ff577009280] 0x6040000130f0 __NSDate
objc[7028]: [0x7ff577009288] 0x604000360cc0 __NSCFTimer
objc[7028]: [0x7ff577009290] 0x604000029440 __NSArrayI
objc[7028]: [0x7ff577009298] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092a8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b0] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092b8] 0x60400002abc0 __NSArrayI
objc[7028]: [0x7ff5770092c0] 0x60400002aaa0 __NSArrayI
objc[7028]: [0x7ff5770092c8] 0x6040000132d0 __NSSingleObjectArrayI
objc[7028]: [0x7ff5770092d0] 0x60800010edf0 UITouchesEvent
objc[7028]: [0x7ff5770092d8] 0x7ff578808a50 UIWindow
objc[7028]: [0x7ff5770092e0] 0x604000026f00 AppDelegate
objc[7028]: ##############
0x75269231ba3900d2

由以上日志可见,断点1处时objc[7028]: 86 releases pending.,有86个autorelease对象等待释放;然后新建一个autoreleasepool,到断点2处时objc[7028]: 87 releases pending.,有87个autorelease对象等待释放;然后创建一个NSArray对象并注册到autoreleasepool,到断点3处时objc[7028]: 88 releases pending.,有88个对象等待释放;最后出autoreleasepool的范围,新建的NSArray对象和autoreleasepool对象都被释放了,又恢复到最初时候objc[7028]: 86 releases pending.,仍然只有86个对象等待释放。整个的过程可以判断出autoreleasepool的内存管理方式。注意在autoreleasepool中包裹的部分,只有通过类方法,并且不是 alloc/init/copy/mutableCopy 获取到的对象才会注册到当前的autoreleasepool中,才可以使用以上方式查找内存的详细情况。

如果autorelease NSAutoreleasePool对象会如何?

1
2
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool autorelease];

回答:发生异常,通常在使用Objective-C,也就是Foundation框架时,无论调用哪一个对象的 autorelease 实例方法,实现上调用的都是 NSObject 类的 autorelease 实例方法。但是对于 NSAutoreleasePool类,autorelease 实例方法已被该类重载,因此运行时就会报错。

参考

《iOS与OS X多线程和内存管理》