Я использовал NSOperation
/ NSOperationQueue
в прошлом для простой работы с потоками. В частности, NSInvocationOperation
позволяет очень просто раскрутить вызов метода, который занимает некоторое время, и NSOperationQueue
практически его обрабатывает. Метод, который вы порождаете, должен быть потокобезопасным, но это не особенно сложно сделать. Например, вы можете создать NSOperationQueue
в ваших -init
или -viewDidLoad
методах, а затем добавить NSInvocationOperation
в очередь и отправить его в путь.
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
NSInvocationOperation *lengthyTask = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processAddresses) object:nil];
[opQueue addOperation:lengthyTask];
[lengthyTask release];
Одна из замечательных вещей (особенно на рабочем столе) заключается в том, что на 10.6 (и iOS 4) автоматически используется Grand Central Dispatch.
Несмотря на то, что многопоточность длинной задачи должна сделать ваше приложение более отзывчивым (особенно если вы просматриваете результаты и отображаете их по мере их поступления от многопоточной задачи, возможно, с помощью KVO), было бы полезно реализовать некоторое кэширование. Перезагрузка адресной книги каждый запуск будет очень дорогостоящим, особенно большинство людей не сильно меняют свои адресные книги. Вы можете хранить вычисленные данные в локальном файле или базе данных (Core Data не слишком сложен в использовании, и если он слишком медленный, вы можете использовать SQLite напрямую). Затем при запуске вы можете запустить адресную книгу, сравнивая даты изменения каждой записи с момента последнего запуска вашего приложения и геокодируя новые измененные записи.