2
我有一個UIViewController與UITableView作爲子視圖。當某個單元格被點擊時,應該顯示一個UIImagePickerController。由於需要很長的初始化時間,因此我在後臺執行此過程時,確實出現了這種情況。
現在我將ARC添加到了我的項目中,然後它仍然沒有工作。最初的過程凍結了用戶界面。iOS,ARC:後臺線程凍結UI
這是我的代碼。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self performSelectorInBackground:@selector(initImagePickerControllerInBackground) withObject:nil];
}
...
- (void)initImagePickerController
{
if (imagePickerController != nil)
return;
imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.allowsEditing = YES;
imagePickerController.delegate = self;
imagePickerController.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
}
- (void)initImagePickerControllerInBackground
{
@autoreleasepool
{
[self initImagePickerController];
}
}
我應該改變什麼才能讓它爲我工作?
好的。你有什麼建議?我應該在應用程序啓動時初始化它嗎? –
UIImagePicker是一個重量級的東西(如你所見),初始化相對較慢並且使用大量內存。出於這些原因,您通常希望將其創建到您需要的位置 - 因此可能不會在應用程序啓動時進行。該應用專注於imagePicker多少錢?它是主要還是次要組件?如果你反覆使用它,我會用你的tableView啓動它(只是不在後臺)。另一個建議是:在用戶第一次選擇更新圖像時懶惰地加載,也許可以通過按鈕將動作移動到詳細信息屏幕,也可以直接從單元格按鈕/選擇中移動。 – isaac
我認爲一般用戶在按下按鈕選擇圖像時可能會出現延遲。我認爲他們不希望在從tableView中選擇一行時出現延遲(因此,我建議將它移動到詳細視圖上的按鈕上)。 – isaac