2

私はAlamofireフレームワークが初めてです。データファイルをダウンロードしようとしています。コードは次のとおりです。

Alamofire.download(.GET, urlStr, { (temporaryURL, response) in
            if let directoryURL = NSFileManager.defaultManager()
                .URLsForDirectory(.DocumentDirectory,
                    inDomains: .UserDomainMask)[0]
                as? NSURL {
                    let pathComponent = response.suggestedFilename

                    return directoryURL.URLByAppendingPathComponent(pathComponent!)
            }

            return temporaryURL
        })

ファイルのダウンロードに成功しました。ただし、すべてのプロセスはメモリで実行されます。ご覧のとおり、大きなファイル (つまり 50 MB 以上) をダウンロードしようとすると、didReceiveMemoryWarning が発生し、アプリが閉じてしまいます。どうすればそれを防ぐことができますか?

テストでは、ムービー (サイズは 220 MB) をダウンロードしようとしましたが、シミュレーターでは、メモリ使用量が最大 500 MB になりました。そして、私が自分の電話を試すとき。メモリ警告を表示した後、それは自動的に閉じました。

4

1 に答える 1

2

大きなファイルをダウンロードしたい場合は、thibaultChaによる TCBlobDownloadSwift と呼ばれる別のライブラリを検討してください。これは TCBlobDownload の Swift バージョンであり、約 150MB から約 1.2GB のファイル (主にビデオ) でテストされています。

その使用法は Alamofire に似ています。

import TCBlobDownloadSwift

// Here is a simple delegate implementing TCBlobDownloadDelegate.
class DownloadHandler: NSObject, TCBlobDownloadDelegate {
  init() {}

  func download(download: TCBlobDownload, didProgress progress: Float, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
    println("\(progress*100)% downloaded")
  }

  func download(download: TCBlobDownload, didFinishWithError error: NSError?, atLocation location: NSURL?) {
    println("file downloaded at \(location)")
  }
}

let fileURL = NSURL(string: "http://some.huge/file.mp4")
let download = TCBlobDownloadManager.sharedInstance
                                    .downloadFileAtURL(fileURL!, toDirectory: nil, withName: nil, andDelegate: DownloadHandler())
于 2015-06-20T15:17:46.190 に答える