SORU
11 Mart 2011, Cuma


Geçersiz kılma yöntemleri kategoriler kullanarak Objective-C

Sınıfı bir kategori zaten bir kategori kullanarak uygulanan bir yöntem geçersiz kılmak için kullanabilir miyim? Bu gibi:

1) Özgün yöntemi

-(BOOL) method {
  return true;
}

2) Overrided yöntemi

-(BOOL) method {
  NSLog(@"error?"); 
  return true; 
}

Bu iş olacak, ya da bu yasal bir şey mi?

CEVAP
11 Mart 2011, Cuma


Apple documentation:

Objective-C dili şu anda sınıfını miras yöntemleri geçersiz kılmak için bir kategori sağlar, ancakhatta yöntemleri kuvvetle bunu yapmak önerilmez sınıf arabirimi olarak ilan etti. Bir kategori bir alt sınıf için bir alternatifi değildir. Yöntemleri geçersiz kılmak için bir kategori kullanarak çeşitli önemli eksiklikler var:

  • Bir kategori bir miras geçersiz kılar yöntemini kategorisinde her zamanki gibi, miras çağırabilirsiniz supermesaj yoluyla uygulanması. Ancakkategori geçersiz kılar eğer kategorisinde var olan yöntem. sınıf, çağırmak için bir yolu yoktur orijinal uygulama.

  • Kategori güvenilir yöntemler aynı sınıfın başka bir kategoride ilan geçersiz kılamaz.

    Bu sorun, Kakao sınıfların birçok kategoriler kullanılarak uygulanır çünkü bu özel bir önem taşıyor. Bir kategori içinde uygulanan olabilir kendisi geçersiz kılmak için deneyin, ve böylece uygulama önceliklidir olan çerçeve tanımlı bir yöntem tanımlanmıştır.

  • Bazı kategori yöntemlerin varlığı tüm çerçeveler arasında davranış değişiklikleri neden olabilir. Örneğin, geçersiz kılma windowWillClose: temsilci yöntemi bir kategori üzerinde NSObject, tüm pencere temsilciler programı daha sonra yanıt kullanarak kategorisini yöntem; davranış tüm örneklerini değiştirmek oldukça kullanışlı olabilir. Sen Ekle kategoriler çerçevesinde bir sınıf üzerinde davranış değişikliklerine neden gizemli ve çöker yol açabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007
  • listedabive

    listedabive

    30 Ocak 2007