应用程序卡在带有 Xcode 11 beta 的 iOS 13 beta 模拟器上,但在带有 Xcode 10 的 iOS 13 beta 模拟器上运行良好

Ghu*_*ool 0 xcode ios swift ios13 xcode11

我正面临一个非常奇怪的问题。在应用程序开始时,我调用 API 来获取令牌。它在 iOS 12 之前运行良好。但是,在 iOS 13 测试版上,完成闭包没有被调用,应用程序不断积累内存并最终崩溃。

但是,当我将相同的代码从 Xcode 10 运行到 iOS 13 beta 模拟器时,它运行良好。

我附上了调用 API 的代码,请帮助我。

这是我没有得到完成处理器和刚刚失去控制的功能。

@discardableResult
static func requestObject<T: Decodable>(urlRequest: URLRequest, sessionManager: SessionManager? = nil, keyPath: String? = nil, decoder: JSONDecoder = JSONDecoder(), queue: DispatchQueue? = nil, completion: @escaping (NetworkResult<T>) -> Void) -> URLSessionTask? {

    let request = self.request(urlRequest: urlRequest, sessionManager: sessionManager)
        .responseDecodableObject(decoder: decoder, keyPath: keyPath, queue: queue) { (response: DataResponse<T>) in

            switch response.result {
            case .failure(let error):    completion(NetworkResult.failure(error))
            case .success(let value):    completion(NetworkResult.success(value))
            }
    }

    return request.task
}
Run Code Online (Sandbox Code Playgroud)

这是我调用的请求函数。

static func request(urlRequest: URLRequest, sessionManager: SessionManager?) -> DataRequest {

    guard let sessionManager = sessionManager else {
        return Alamofire.request(urlRequest)
            .validate { (request, response, data) -> Request.ValidationResult in
                return self.validation(request: request, response: response, data: data)
        }
    }

    return sessionManager.request(urlRequest)
        .validate { (request, response, data) -> Request.ValidationResult in
            return self.validation(request: request, response: response, data: data)
    }
}
Run Code Online (Sandbox Code Playgroud)

Ghu*_*ool 5

找到了解决方案,终于:)

实际上我的主线程被阻塞了,它阻塞了所有其他线程,应用程序继续积累内存。我正在使用第三方标签,这导致了这个问题。

这是导致该问题的代码。

override func layoutSubviews() {
    super.layoutSubviews()
    self.frame = self.frame.insetBy(dx: 0, dy: -3)
}
Run Code Online (Sandbox Code Playgroud)

直到 iOS 12,它运行良好。但它在 iOS 13 中持有主线程,并在收集过多内存后导致应用程序崩溃。

我从 layoutsubviews 中删除了框架更新代码,一切正常:)