Использование какао iPhone nsrunloop
-
19-09-2019 - |
Вопрос
Я обнаруживаю, что использую комбинацию глобальных VARS и NSRUNLOOP, чтобы усилить синхронизацию на протяжении всего моего приложения. Хотя это работает, это кажется мне немного уродливым. Есть ли другой способ достижения того же результата?
Вот типичный пример:
ParkingSpots *parkingSpots = [[[ParkingSpots alloc] initWithMapViewController:self] autorelease];
keepRunning = YES;
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (keepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
UpdateLocation *updatedLocation = [[[UpdateLocation alloc] initWithUserid:@"me" andCoordinate:annotation.coordinate withMapViewController:self]
autorelease];
NSLog(@"Lat = %f, Long = %f",annotation.coordinate.latitude,annotation.coordinate.longitude);
[updatedLocation sendUpdate];
В этом коде мне нужно подождать, пока объект Parkingspots полностью инициализируется, прежде чем я инициализацию UpdateLocation. Поскольку UpdateLocation ожидает полностью инициализации парковки, без обновления Runloop не инициализировалось должным образом. С Runloop все работает, как и ожидалось.
Однако это выглядит очень уродливо для меня (установление глобального VAR в различных точках моего кода). Есть более элегантное решение? Заранее спасибо за помощь!
Решение
Вы можете использовать шаблон делегата на своем ParkingSpots
класс и позвоните делегату, когда он заканчивает инициализацию. например
ParkingSpots *parkingSpots = [[[ParkingSpots alloc] initWithMapViewController:self] autorelease];
parkingSpots.delegate = self;
parkingSpots.didInitialiseSelector = @selector(parkingSpotsInitialised:);
[parkingSpots startLengthyInitialisation];
- (void) parkingSpotsInitialised:(ParkingSpots*)parkingSpots {
UpdateLocation *updatedLocation = [[[UpdateLocation alloc] initWithUserid:@"me" andCoordinate:annotation.coordinate withMapViewController:self] autorelease];
}
Вы также можете использовать уведомления для достижения того же самого.
Другие советы
Я думаю, вам нужно посмотреть на объектив-C Функция синхронизации.