Вопрос

Я обнаруживаю, что использую комбинацию глобальных 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 Функция синхронизации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top