首页 > 解决方案 > AFNetworking 意外在 AFAutoPurgingImageCache 中遇到断点

问题描述

在将 AFNetworking 添加到我的 iOS 项目后,我遇到了一个奇怪的问题。AF 的版本是3.2.1. 如果我在line 111in添加一个断点AFAutoPurgingImageCache.m然后运行这个项目,这个断点会奇怪地被命中。但是,如果我将此断点移动到第 110 行或第 112 行,它将不再被命中。谁能告诉我为什么被击中?类AFAutoPurgingImageCache仅在下载图片时使用,与我发送的请求无关。

包含此特殊行的方法是

- (void)addImage:(UIImage *)image withIdentifier:(NSString *)identifier

我已经制作了断点位置的屏幕快照。 奇怪的断点

这是命中断点时的堆栈。

Thread 1 Queue : com.apple.main-thread (serial)
Thread 2 Queue : com.apple.NSURLSession-work (serial)
Thread 3 Queue : requestHeaderModificationQueue (concurrent)
#0  0x000000010df0d740 in __destroy_helper_block_e8_32s40s48s at /.../Pods/AFNetworking/UIKit+AFNetworking/AFAutoPurgingImageCache.m:111
#1  0x00007fff51a759ba in _Block_release ()
#2  0x000000010dfa9e8e in _dispatch_client_callout ()
#3  0x000000010dfba2a0 in _dispatch_lane_concurrent_drain ()
#4  0x000000010dfb134c in _dispatch_lane_invoke ()
#5  0x000000010dfac0ff in _dispatch_queue_override_invoke ()
#6  0x000000010dfbb399 in _dispatch_root_queue_drain ()
#7  0x000000010dfbbca6 in _dispatch_worker_thread2 ()
#8  0x00007fff51c089f7 in _pthread_wqthread ()
#9  0x00007fff51c07b77 in start_wqthread ()
Thread 4Thread 5com.apple.uikit.eventfetch-thread (6)Thread 7Thread 8Thread 9

使用 AF 的代码只是几行写在didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    static AFHTTPSessionManager* manager = nil;
    manager = [[AFHTTPSessionManager alloc] init];
    
    id<AFURLResponseSerialization> responseSerialization = [AFJSONResponseSerializer serializer];
    manager.responseSerializer = responseSerialization;
    
    [manager GET:@"https://www.google.com/" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"ok");
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error");
    }];
    
    return YES;
}

标签: iosmultithreadingdebuggingmemoryblock

解决方案


推荐阅读