Как бороться с многопоточностью с помощью evernote api на iOS - PullRequest
0 голосов
/ 31 марта 2012

Сейчас я разрабатываю приложение для iOS с помощью evernote api.и у меня есть некоторые проблемы с многопоточностью.Ниже представлен механизм многопоточности в моем приложении, это хорошо или плохо?любые предложения приветствуются.

  1. Используйте MainThread (поток a) для отображения и обновления пользовательского интерфейса.
  2. Используйте поток b для загрузки noteList из evernote, когда пользователь находится на странице noteList.
  3. Используйте Поток c для загрузки noteResource из evernote, когда пользователь на странице noteDetail.

Если пользователь щелкнет одну заметку на странице noteList, когда Поток b не закончен.я должен отменить тему b, прежде чем использовать тему c для загрузки noteResource?или безопасно одновременно запускать как нить b, так и нить c?

Есть ли какие-либо документы или инструкции по этому вопросу?

Я добавил код ниже, верно?При первом входе пользователя в систему будет работать masterSync, заголовок заметки будет загружен и отображен.После этого, если пользователь нажмет кнопку синхронизации, masterSync снова запустится, но теперь он завершится сбоем при доступе authenticateToken из authResult, когда noteStore alloc / init, я сохранил authResult при успешном входе пользователя, верно?

-(void)sync:(id)obj {
    NSOperationQueue *operationQueue = [AppDelegate sharedOperationQueue];

    if ([obj isKindOfClass:[Note class]]) {
        self.detailSync = [[[EvernoteDetailSync alloc] initWithNote:obj] autorelease];
        detailSync.noteStore =[[[EvernoteNoteStore alloc] initWithToken:[authResult authenticationToken] shardId:[[authResult user] shardId]] autorelease];
        [operationQueue addOperation:detailSync];
    } else {
        self.masterSync = [[[EvernoteMasterSync alloc] initWithNotebookGuid:obj] autorelease];
        masterSync.noteStore =[[[EvernoteNoteStore alloc] initWithToken:[authResult authenticationToken] shardId:[[authResult user] shardId]] autorelease];
        [operationQueue addOperation:masterSync];
    }
}

1 Ответ

0 голосов
/ 01 апреля 2012

Класс Evernote NoteStore не является потокобезопасным. Чтобы сделать несколько одновременных запросов API Evernote, вы можете создать несколько объектов NoteStore.

...