Closed MarginHui closed 6 years ago
你好,可以使用 MLeaksFinder:https://github.com/Tencent/MLeaksFinder 检测下应用里的内存泄露,TZImagePickerController内部的处理目前无法再优化了,目前所有功能都没有内存泄露(可以用instruments检测),内存飙到975M应该不是TZImagePickerController引起的,只是正好用户在内存很高的时候去选择照片了,崩溃堆栈显示用户是刚到照片列表页,我在Demo里5000张照片的获取和展示内存只涨了11M,建议先去排查其它地方。
我看到TZImagePickerController里面已经修复了瞬间内存过高的问题,但是我们app在使用这个库的时候,快速选择几张图片的瞬间还是出现内存暴增的问题(50M-100多M),但不是每次选择图片都有内存暴增,如果多试几次,有时还会出现暴增,我们线上使用的版本是1.9.8版本。
使用: NSInteger seletMaxImages = kMaxImageUploat - self.vm.imageArray.count; TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:seletMaxImages delegate:self]; imagePickerVc.showSelectBtn = YES; // 一直展示选择按钮,防止最大可选图片为1时,三方库内部会隐藏选择按钮 imagePickerVc.allowPickingVideo = NO; // 不能选择视频 imagePickerVc.allowTakePicture = NO; // 内部拍照按钮隐藏 [self presentViewController:imagePickerVc animated:YES completion:nil];
回调: // 返回选择的图片
(void)imagePickerController:(TZImagePickerController )picker didFinishPickingPhotos:(NSArray )photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {
NSMutableArray *images = [NSMutableArray arrayWithCapacity:photos.count];
if (images.count > 0) {
} }
我用的测机是: 6plus 10.3.2
5s 11.0.1
线上我们有用户crash:
0. Crashed: com.apple.batchFetchingArray
0 libsystem_kernel.dylib 0x196a4f270 pthread_kill + 8 1 libsystem_pthread.dylib 0x196aed228 pthread_kill + 112 2 libsystem_c.dylib 0x1969c6b18 abort + 112 3 libsystem_malloc.dylib 0x196a8a3e4 _nano_malloc_check_clear + 318 4 libsystem_malloc.dylib 0x196a892f8 nano_free + 192 5 CoreFoundation 0x185a56220 _CFArrayReplaceValues + 1152 6 CoreFoundation 0x185a55d5c CFArrayAppendValue + 164 7 Photos 0x1899d4aa4 66-[PHBatchFetchingArray countByEnumeratingWithState:objects:count:]_block_invoke + 88 8 libdispatch.dylib 0x19690d36c _dispatch_client_callout + 16 9 libdispatch.dylib 0x1969166e8 _dispatch_barrier_sync_f_invoke + 76 10 Photos 0x1899d49ec -[PHBatchFetchingArray countByEnumeratingWithState:objects:count:] + 200 11 CoreFoundation 0x185b6744c __NSArrayEnumerate + 556 12 Photos 0x1899dab60 -[PHFetchResult enumerateObjectsUsingBlock:] + 88 13 teacher 0x100506560 -[TZImageManager getAssetsFromFetchResult:allowPickingVideo:allowPickingImage:completion:] (TZImageManager.m:242) 14 teacher 0x1005024c8 -[TZAlbumModel setResult:] (TZAssetModel.m:38) 15 teacher 0x10050ba98 -[TZImageManager modelWithResult:name:isCameraRoll:] (TZImageManager.m:903) 16 teacher 0x1005055c4 -[TZImageManager getCameraRollAlbum:allowPickingImage:completion:] (TZImageManager.m:141) 17 teacher 0x10050ee48 -[TZImagePickerController pushPhotoPickerVc] (TZImagePickerController.m:304) 18 teacher 0x10050d8b0 -[TZImagePickerController initWithMaxImagesCount:columnNumber:delegate:pushPhotoPickerVc:] (TZImagePickerController.m:197) 19 teacher 0x1002c63b8 -[AssignHomeworkView actionSheet:clickedButtonAtIndex:] (AssignHomeworkView.m:639) 20 UIKit 0x18a8dda54 -[UIActionSheet _prepareToDismissForTappedIndex:] + 200 21 UIKit 0x18a8dd960 37-[UIActionSheet _prepareAlertActions]_block_invoke114 + 48 22 UIKit 0x18a6f0c40 -[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:] + 104 23 UIKit 0x18a318750 _UIGestureRecognizerUpdate + 8536 24 UIKit 0x18a3528dc -[UIWindow _sendGesturesForEvent:] + 1044 25 UIKit 0x18a351f7c -[UIWindow sendEvent:] + 660 26 UIKit 0x18a32568c -[UIApplication sendEvent:] + 264 27 UIKit 0x18a5c460c _UIApplicationHandleEventFromQueueEvent + 14992 28 UIKit 0x18a323bf4 _UIApplicationHandleEventQueue + 1616 29 CoreFoundation 0x185b2e9ec CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 24 30 CoreFoundation 0x185b2dc90 CFRunLoopDoSources0 + 264 31 CoreFoundation 0x185b2bd40 __CFRunLoopRun + 712 32 CoreFoundation 0x185a590a4 CFRunLoopRunSpecific + 396 33 GraphicsServices 0x18ebf35a4 GSEventRunModal + 168 34 UIKit 0x18a38aaa4 UIApplicationMain + 1488 35 teacher 0x100446118 main (main.m:14) 36 libdyld.dylib 0x196936a08 start + 4
崩溃用户的设备及系统: 6plus 8.1.3