SORU
28 Ocak 2010, PERŞEMBE


Neden'Objective-C t özel yöntemleri desteklemez?

Yarı özel yöntemler bildirmek için stratejiler bir dizi gördümObjective-Cgerçekten özel bir yöntem sağlamak için bir yol olarak orada görünmüyor ama. Bunu kabul ediyorum. Ama, bu neden böyle? Aslında yaptığım her açıklama, "bunu yapamazsın, ama buraya yakın bir yaklaşım var." diyor

Anahtar kelimeler kapsamı, örneğin @private, @public, @protectedkontrol* *0 (üyeleri) uygulanan vardır. Neden bu yöntemler için de yapılabilir mi? Çalışma zamanı desteği için olması gereken bir şey gibi görünüyor. Kaçırdığım temel bir felsefesi var mı? Bu kasıtlı mı?

CEVAP
29 Ocak 2010, Cuma


Cevap... basit. Aslında basitlik ve tutarlılık.

Objective-C yöntemin an merkezden tamamen dinamiktir. Özellikle, her yöntem, her bir diğer yöntem olarak aynı dinamik yöntem çözüm noktası merkezden geçer gönderme. Çalışma zamanında, her yöntem uygulama aynı pozlama ve yöntemleri ve seçiciler ile çalışan API Objective-C çalışma zamanı tarafından sağlanan aynı ölçüde tüm yöntemler arasında aynı iş.

Çok var: "hem burada hem de diğer soruları), bir derleme özel yöntemler desteklenen; eğer bir sınıf değil ilan bir yöntem olan halka açık bir arayüz, bu yöntem belki de yok bildiğim kadarıyla kodunuzu ilgili. Diğer bir deyişle, görünürlük çeşitli kombinasyonları uygun bir proje düzenleyerek derleme sırasında istenen tüm elde edebilirsiniz.

Aynı işlevi zamanı içine çoğaltmak için çok az yararı var. Karmaşıklığı ve havai muazzam miktarda ekleyin. Ve hatta bu karmaşıklık, hala yürütülmesini ama en rahat geliştirici engel olmaz senin sözde "özel" yöntemler.

EDİT: yaptığım varsayımların fark özel mesaj istiyorsunuz. çalışma zamanı geçmek zorunda bir sonuçlanabilecek potansiyel olarak büyük Tepegöz. Bu kesinlikle doğrudur?

Evet, öyle. A sınıfı uygulayıcı uygulama Objective-C özellik kümesini kullanmak istemiyorum ummak için bir neden yok, ve bu dinamik gönderme gerçekleşmesi gerektiği anlamına gelir.Ancakorada hiçbir neden yokken neden özel yöntemler olamaz sevk ile özel bir varyant objc_msgSend() beri derleyici bilebilir ki onlar özel; yani bu olabilir elde ekleyerek özel tek yöntem Tablo Class yapısı.

Yalnız kalmak için yolu yok artık yok kısa devre bu kontrol etmek veya yöntem çalışma zamanı, skip?

Çalışma zamanı atlamak olamaz, ancak çalışma zamanıolmazmutlaka özel yöntemler için herhangi bir kontrol yapmak zorunda.

O dedi, orada hiçbir neden bir üçüncü taraf olamaz kasten çağrı objc_msgSendPrivate() bir nesne, dışarıdan uygulanması nesne, ve bazı şeyler (KVO, örneğin) yapmak gerekir. Sonuç olarak, sadece Kongre ve özel yöntemler’ seçiciler veya arayüz başlığındaki onlara söz değil. isime daha pratik daha iyi olurdu

Bunu yapmak için, olsa da, dilin saf dinamik yapısı zarar verecek. Artık gönderme, eşdeğer geçmesi her yöntemi mekanizma gönderme. Bunun yerine, pek çok yöntem, bir şekilde davranır bir durumda kalır ve küçük bir avuç sadece farklı.

Bu uzanır ötesinde çalışma zamanı gibi pek çok mekanizmaları Kakao inşa tepesinde tutarlı bir dinamizm Objective-C İçin örnek, iki Anahtar Değeri Kodlama ve Anahtar Değeri Gözlem ya da sahip olmak için çok ağır modifiye için destek özel yöntem — en muhtemel oluşturarak bir sömürülebilir boşluk ya da özel yöntem olurdu uyumsuz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christopher Bill

    Christopher

    30 NİSAN 2009
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011
  • William Hyde

    William Hyde

    23 HAZİRAN 2008