XcodeでMac用のドキュメントアプリを作ったのですが原因不明の不具合に遭遇。
動画ファイルを再生するアプリを作り、動画ファイルをアプリにドラッグ&ドロップして再生テストをしていたのですが小さなファイルだと問題なし。でもギガを超えるファイルをドロップしたらアプリがフリーズしたような状態に。
アクティビティモニターで確認してみたらメモリーがどんどん増えているw
どうみてもファイルの中身をメモリに展開しているとしか思えない。
そこでアクティビティモニターにある「サンプルを収集」で情報を確認。
そしてはたと気がついた。
[NSDocument readFromURL:ofType:error:]
これの後にNSDataでファイルを読み込んでいる。
あれ?
アプリの雛形にこれは無くてこっちが…
[NSDocument readFromData:ofType:error:]
どうやら雛形のままだとファイル全体を読み込んでからデータを引き取る仕組みになっている。
なのでファイルURLを受け取るファンクションをオーバーライド。
無事問題なく動くアプリになりましたw
ちなみにテキストエディタなどのアプリを作るのならデータを受け取ったほうが簡単だと思います。
mac drag and drop large file failed