SORU
10 AĞUSTOS 2011, ÇARŞAMBA


performSelector onun seçici bilinmiyor çünkü sızıntısına neden olabilir

ARC derleyici tarafından aşağıdaki uyarıyı alıyorum:

"performSelector may cause a leak because its selector is unknown".

Yaptığım şey şu:

[_controller performSelector:NSSelectorFromString(@"someMethod")];

Neden bu uyarıyı alıyorum? Ben derleyici eğer seçici varsa kontrol edebilir mi anlamak ya da değil, ama neden böyle bir sızıntısına neden olur? Ve nasıl bu uyarı artık anlamadım yani bu kodumu değiştirebilir miyim?

CEVAP
28 EKİM 2011, Cuma


Böyle büyük mükafat 4.2 3.0 LLVM derleyici aşağıdaki gibi bir uyarı bastırmak

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [self.ticketTarget performSelector: self.ticketAction withObject: self];
#pragma clang diagnostic pop

Eğer birkaç yerde hata alıyorsanız, daha kolay uyarıyı bastırmak için yapmak için bir makro tanımlayabilirsiniz:

#define SuppressPerformSelectorLeakWarning(Stuff) \
    do { \
        _Pragma("clang diagnostic push") \
        _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
        Stuff; \
        _Pragma("clang diagnostic pop") \
    } while (0)

Bu makroyu kullanabilirsiniz:

SuppressPerformSelectorLeakWarning(
    [_target performSelector:_action withObject:self]
);

Eğer yapılan mesaj sonucu gerekiyorsa, bunu yapabilirsiniz:

id result;
SuppressPerformSelectorLeakWarning(
    result = [_target performSelector:_action withObject:self]
);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • Droid Life

    Droid Life

    17 Kasım 2009
  • thenewboston

    thenewboston

    4 ŞUBAT 2008