查看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多线程和内存管理》