所以我試圖採取可變大小(從幾MB到超過GB的任何地方)QTMovie對象,並使用writeToFile:withAttributes:
將其導出到磁盤。由於這需要很長時間並鎖定用戶界面,因此我決定使用Grand Central Dispatch將其置於不同的線程中。如何阻止QTMovie凍結我的應用程序的UI?
據我所知,這工作得很好,除了使用writeToFile:withAttributes:
仍然鎖定應用程序。它會導出文件,但在用戶界面完成之前您無法對其執行任何操作。
我已經瀏覽了使用QTKit的多個線程以及谷歌上的各種地方的所有文檔,但沒有任何我嘗試過似乎工作。
下面是一個似乎有麻煩的代碼:
[movie detachFromCurrentThread];
dispatch_queue_t combineQueue = dispatch_queue_create("com.Combinate.movieCombineQueue", NULL);
dispatch_async(combineQueue, ^{
[QTMovie enterQTKitOnThreadDisablingThreadSafetyProtection];
[movie attachToCurrentThread];
[movie writeToFile:filepath withAttributes:exportAttributes];
[movie detachFromCurrentThread];
[QTMovie exitQTKitOnThread];
dispatch_async(dispatch_get_main_queue(), ^{
[movie attachToCurrentThread];
[self finishedCombiningAudioFiles:(QTMovie *)movie];
});
});
dispatch_release(combineQueue);
感謝您的幫助。這實際上指向了我正確的方向。顯然,' - (Movie)quickTimeMovie'方法不適用於64位應用程序,只適用於32位應用程序。我認爲(不知道這一點),' - (BOOL)detachFromCurrentThread'實際上是在使用'DetachMovieFromCurrentThread',這可以解釋它失敗的原因。爲了讓它工作,我所要做的就是將應用程序轉換爲32位而不是64位編譯。幾乎不理想,但至少它是有效的。 – jcocoa5 2012-02-19 01:45:27