2013-02-01 18 views
4

我允許用戶從他/她的庫中選擇視頻。當照片庫打開時,如果要查看「設置」 - >「常規」 - >「使用情況」,則似乎大約會將1.5Mb添加到文檔和數據中。一旦用戶選擇視頻並將其壓縮,總共大約4.5Mb被添加到文檔和數據。我的問題是這個數據/內存永遠不會釋放。在完成任何類型的保存之前,所有這些都將被添加。所以文件和數據使用量不斷增加,我不知道爲什麼。我很確定一切都在發佈。UIImagePickerController保存未記下的內存

- (void)viewDidAppear:(BOOL)animated 
{ 
//[super viewDidAppear:animated]; 
     if (IsFirstCall) { 

      UIImagePickerController *uploadPick = [[[UIImagePickerController alloc] init] autorelease] ; 
      uploadPick.delegate = self; 
      uploadPick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
      uploadPick.mediaTypes = [[[NSArray alloc] initWithObjects:(NSString *) kUTTypeMovie, nil] autorelease]; 

     [self presentViewController:uploadPick animated:YES completion:nil]; 
     //[uploadPick release]; 
    } 
} 

任何幫助,非常感謝。我不認爲它可能在實際的手機上使用文件管理器,它似乎只適用於模擬器。我花了很多時間試圖弄清楚爲什麼會發生這種情況。

+0

點你啓用ARC? –

+0

我做了,它在Build Settings下設置爲Yes – TMan

+0

這就是Objective-C自動引用計數? – TMan

回答

1

這裏發生的事情的可能性實際上是臨時文件被保存。你提到壓縮視頻似乎會觸發這種空間的增加。

有兩種方法可以通過兩種方法之一進行確認。通過重新啓動您正在測試的設備。當系統需要額外的空間或系統關閉時,臨時項目將被系統清除。

另一種方法(也許更具信息性)是通過Xcode組織者調查應用程序。您可以通過選擇設備上的應用程序並瀏覽應用程序目錄結構來完成此操作。每個應用程序都有3個目錄,/ Documents,/ Library和/ tmp。

對於密集型操作,可能需要使用大量內存,某些庫會將完成的數據保存到磁盤中,以釋放內存。一旦操作完成,它會傳回一個數據塊,或者引用臨時文件中的數據,或者將已完成的數據加載回內存。這個過程對於用戶和開發者來說是完全透明的,並且利用了大量的閃存,而不是完全依賴於相對有限的RAM。

如果它不是一個臨時文件,而是位於應用程序(甚至是庫)的Documents文件夾中的某個事件,那麼將它下載到您的計算機並嘗試調查其內容,因爲它可能會給你一些關於發生的事情的線索。

希望這有助於

編輯爲清楚起見

+0

因此,我重新啓動了手機,不幸的是數據仍然存在。我會盡快嘗試其他方法。我是否需要使用樂器來使用組織者? – TMan

+0

好吧好消息,從組織者然後從我的手機,我點擊我的應用程序來查看文件,並在tmp文件夾中是一個名爲trim.IEKOAK.MOV的文件,所以它似乎正確後,我選擇了一個視頻,並在它壓縮後,這個視頻正被保存到我的tmp文件夾中。現在的問題是爲什麼?我沒有告訴/編碼任何東西來保存視頻。 – TMan

+0

這是極有可能的(幾乎可以肯定我會說)圖像採集器庫(與電影交易時)必須將它們保存到/ tmp才能完成所需的任何操作,例如壓縮和修剪。這是因爲電影有多大的潛力。如果您有一部200MB的電影,試圖在RAM上執行操作時將其全部內容包含在RAM中並不是最佳的資源使用方式。可能的操作順序類似於:從原始影片的大塊> _operation_>將塊保存到/ tmp>重複,直到操作完成 –