SORU
31 Mayıs 2009, Pazar


Nasıl geçer @parametre olarak seçici?

Yöntemi:

[NSThread detachNewThreadSelector:@selector(method:) toTarget:self withObject:(id)SELECTOR];

Nasıl @seçici olarak geçer? Bu döküm denedim (ıd) derleme yapmak için, ama zamanı çöker.


Daha spesifik olarak, böyle bir yöntem var:

 (void)method1:(SEL)selector{
[NSThread detachNewThreadSelector:@selector(method2:) toTarget:self withObject:selector];   
}

Çöküyor. Nasıl yeni bir iş parçacığı hazır olduğunda seçici çağrı, böylece çökmesini olmadan seçici geçişte, değil mi?

CEVAP
31 Mayıs 2009, Pazar


Burada sorun, bir yöntem, ama, tek başına bir nesne beklenen bir seçici geçirilmesi için bir seçici geçmiyor. Bir nesne olmayan nesne bir değer vermek, NSValue kullanabilirsiniz. Bu durumda, bir NSValue kabul eder ve uygun seçici alan bir yöntem oluşturmanız gerekir. İşte bir örnek uygulama:

@implementation Thing
- (void)method:(SEL)selector {
    // Do something
}

- (void)methodWithSelectorValue:(NSValue *)value {
    SEL selector;

    // Guard against buffer overflow
    if (strcmp([value objCType], @encode(SEL)) == 0) {
        [value getValue:&selector];
        [self method:selector];
    }
}

- (void)otherMethodShownInYourExample {
    SEL selector = @selector(something);
    NSValue *selectorAsValue = [NSValue valueWithBytes:&selector objCType:@encode(SEL)];
    [NSThread detachNewThreadSelector:@selector(methodWithSelectorValue:) toTarget:self withObject:selectorAsValue];
}
@end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • funbro1

    funbro1

    11 Aralık 2007
  • Jack Vale Films

    Jack Vale Fi

    8 ŞUBAT 2007
  • MndsgnVEVO

    MndsgnVEVO

    26 Kasım 2013