sshiqiao / douyin-ios-swift

抖音 iOS Swift版
https://sshiqiao.github.io/document/douyin-swift.html
MIT License
609 stars 164 forks source link

上下刷视频刷的快的话,必crash #11

Open yuanzhiying opened 5 years ago

yuanzhiying commented 5 years ago

func respondWithDataForRequest(loadingRequest:AVAssetResourceLoadingRequest) -> Bool { let mimeType = self.response?.mimeType ?? "" let contentType = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType as CFString, nil) loadingRequest.contentInformationRequest?.isByteRangeAccessSupported = true loadingRequest.contentInformationRequest?.contentType = contentType?.takeRetainedValue() as String? // 崩溃位置 --- loadingRequest.contentInformationRequest?.contentLength = (self.response?.expectedContentLength)!

    var startOffset:Int64 = loadingRequest.dataRequest?.requestedOffset ?? 0
    if loadingRequest.dataRequest?.currentOffset != 0 {
        startOffset = loadingRequest.dataRequest?.currentOffset ?? 0
    }

    if Int64(data?.count ?? 0)  < startOffset {
        return false
    }

    let unreadBytes:Int64 = Int64(data?.count ?? 0) - (startOffset)
    let numberOfBytesToRespondWidth:Int64 = min(Int64(loadingRequest.dataRequest?.requestedLength ?? 0), unreadBytes)
    if let subdata = (data?.subdata(in: Int(startOffset)..<Int(startOffset + numberOfBytesToRespondWidth)))  {
        loadingRequest.dataRequest?.respond(with: subdata)
        let endOffset:Int64 = startOffset + Int64(loadingRequest.dataRequest?.requestedLength ?? 0)
        return Int64(data?.count ?? 0) >= endOffset
    }
    return false
}
TJDaDa commented 4 years ago
  1. 不要在set里面创建对象, 滑动cell会导致偶尔没释放内存增加堆栈闪退.
  1. 要在初始化里面创建对象, set里面只赋值, 滑动cell就不用每次释放对象了.