SORU
3 AĞUSTOS 2010, Salı


Objective C: Blok vs vs Seçiciler Protokolleri

Ben sık sık kendimi yazarken "" yeniden kullanılan projelerimi boyunca. sınıflar programı bulmak

Örneğin, bir "Kitap" olarak görmek. Adresi yoktur sanırım Bir e-posta gönderdi kim, ya da belki bir toplantı isteği eklenir kim seçmek için adres defterimi kullanmak istiyorum.

İsterdim geliştirmek bu görünüm denetleyicisi öyle olabilir, hem de e-posta denetleyicisi ve toplantılar denetleyicisi ile bir çeşit geri arama mekanizması için izin arayanı biliyor kullanıcı ya da bitmiş seçme birinden adres defteri, ya da iptal ettiler.

Bu senaryoda alabilir yaklaşımlar dört; temelde var gibi görünüyor

  • Bir "" protokol ve AddressBookController. ilgili temsilci bir özellik AddressBookDelegate oluşturun Sonra iletileri protokol sonucu iletişim kurmak için tanımlı (UİActionSheetDelegate benzer) kullanın.

  • Oluşturmak bir "gayri resmi" "AddressBookDelegate" protokol ve ilgili temsilci özellik AddressBookController, ama bu tür temsilci özelliği olacak "id" ve check zamanı "respondsToSelector:" eğer temsilci uygular yöntemleri gerektirir (gibi görünüyor en çerçevesinde bir şeyler başlamış olacak bu şekilde).

  • Bu AddressBookController bir temsilci olarak, kullanıcı bir kullanıcı seçtiğinde aranacak yöntemleri belirlemek ya da isteği iptal eder İki SELs temsil eden bir ıd Pass. Faydasını görüyorum bu; sanırım bir kontrolcü HEM de e-posta gönderme VE kurma toplantıları (biliyorum bu örnekte olduğu gibi kötü bir tasarım... ama bir düşünsene bir daha genel durum bu gibi görünüyor, son derece makul bir Yardımcı Sınıf) - bu durumda olabilir pass AddressBookController farklı SELs bağlı ister misin ekleyerek kullanıcılar için bir e-posta veya kullanıcı ekleme için bir toplantı... büyük bir gelişme içinde ıvar işaret sistemi "devlet".

  • AddressBookController iki blok; kullanıcı adres defterinden birini seçtiğinde çalıştırmak için diğeri ise kullanıcı isteği iptal ederse çalıştırmak için geçiş.

Bloklar benim için son derece yararlı olmuştur, ve çok daha şık, kendim kullanmak için DEĞİL zaman içinde neredeyse kafası karışık buluyorum.

Bu konu hakkında düşünceleri ile yardım edebilirim daha StackOverflow topluluk daha deneyimli üyeleri umuyorum.

CEVAP
3 AĞUSTOS 2010, Salı


'Geleneksel' bunu yapmak için bir şekilde bir protokol ile. Gayri resmi olanlar @protokolü dil eklendi, ama bu gayri resmi protokolleri, özellikle @isteğe bağlı belirtici verilen isimler en azından son bir kaç senedir benden önce ve önce kullanılmıştır. Bir 'temsilci' iki SELs geçer, bu sadece resmi bir protokol ilan daha çirkin görünüyor, ve genellikle bana pek doğru gelmiyor. gelince Bloklar çok yeni (esp. üzerinde iOS), bu işler ve süre var Henüz görmek büyük hacimli belgeleri/bloglar en iyi denenmiş ve gerçek stil, sevdim bu fikri, ve bu gibi görünüyor bir şeyler taşlarıdır iyisi: temiz yeni akış kontrol yapıları.

Temelde ne demek istediğimi her yöntemleri ve bu farklılık yaş, yok olmaktan daha iyi bir son dışında tarzı, belli ki önemli bir çok şey, ve sonuçta neden her şey bu oluşturuldu. Temel olarak, gidip yeni şey size rahat bir ya bloklar ya da bir resmi protokol ve bu karışıklık büyük olasılıkla gelecek okuma çakışan kaynakları oldukları için yazılmış farklı saatlerde, ama zaman içinde perspektif, net görmeye yerini alır Diğerleri.

[Controller askForSelection:^(id selection){
  //blah blah blah
} canceled:^{
  //blah blah blah
}];

muhtemelen bugün ivan'ın bir sürü fazladan iki yöntem, ve onlar için bir protokol (resmi ya da aksi) tanımlama veya SELs geçen ve onları saklamak daha özlü bir cehennem, vb.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • Bratayley

    Bratayley

    30 Aralık 2010
  • Motor Trend Channel

    Motor Trend

    11 Mart 2006