Я разрабатываю приложение iOS 5.0+ с последним SDK.NSCondition: подождите определенное количество времени
Это приложение является переносом из приложения для Android.
На Android приложения У меня есть этот код:
private Object uploadWorkerLock = new Object();
private static final int UPLOAD_WORKER_SLEEP_TIME = 30000;
[ ... ]
synchronized (ServerManager.this.uploadWorkerLock) {
try {
ServerManager.this.uploadWorkerLock.wait(UPLOAD_WORKER_SLEEP_TIME);
} catch (InterruptedException e) {
return;
}
}
Я проблему с void java.lang.Object.wait(long millis)
. Я могу перенести этот код таким образом:
NSCondition * uploadWorkerLock;
[ ... ]
[uploadWorkerLock lock];
[uploadWorkerLock wait];
[uploadWorkerLock unlock];
Чтение Java документации о wait(long), я прочитал это:
Вызывает текущий поток ждать, пока либо другой поток не вызывает метод Notify() или метод notifyAll() для этого объекта, или указанный количество времени истекло.
Я знаю, что может вызвать [uploadWorkerLock invoke]
но как я могу имитировать, что определенного количества времени прошло.?
Кстати, этот код находится внутри NSThread selector
.
Ваша проблема в том, что вы должны выполнять гранулирование при переносе своего приложения. Вопрос, который вы должны задать, - «как загрузить файл?». Не пытайтесь переводить приложение по очереди. Пока мы это делаем. В общем избегайте 'NSThread'. GCD или NSOperation - это путь. –
Также относится к портированию. Держитесь подальше от использования исключений для потока управления в Objective-C. Я знаю, что это так, как вы делаете это на Java, но Objective-C использует NSError и возвращает nil, когда есть ошибка ('nil' безопасен для сообщения, исключений с нулевым указателем в Objective-C нет). –
Я думаю, что я не очень хорошо объяснил или не понял: этот код находится внутри потока на Android, и я портировал его в NSThread. Внутри андроидного потока у меня есть Object.wait, и я не знаю, как это сделать на iOS. – VansFannel