SORU
1 EKİM 2008, ÇARŞAMBA


Bir mesaj yok?

Apple'ın Objective-C 2.0 belgeleri okuma Java geliştirici olarak: ne kadar merak ediyorumnil için bir mesaj yolladıdemek, bırakın nasıl aslında yararlıdır. Belgelerine bir alıntı alarak:

Kakao birçok desenler vardır bu gerçeği yararlanmak. Bu değeri sıfır bir mesaj döndü de geçerli olabilir:

  • Eğer bu yöntem bir nesne döndürürse, herhangi bir işaretçi türü, herhangi bir tamsayı skaler boyutu daha az ya da eşit boyutu(void*), bir şamandıra, bir çift, bir uzun Çift, ya da uzun uzun, sonra mesaj nil döndürür gönderilmiş 0.
  • Eğer bu yöntem bir yapı verir, Mac OS X ile tanımlanan Fonksiyon ABİ İade edilmesi için çağrı Rehberi kaydeder, daha sonra bir mesaj nil gönderildi her alan için 0.0 döndürür veri yapısı. Diğer yapı veri türleri sıfırlarla dolu değil.
  • Eğer bu yöntem bir şey söz konusu değeri dışında bir değer döndürürse tür bir mesaj dönüş değeri nil gönderilir tanımlanmamış.

İşlenen Java var beynimin yukarıdaki açıklama grokking aciz? Yoksa bu cam gibi net yapmak istiyorum, kaçırdığım bir şey mi var?

Not: Evet, Objective-C, sadece sıfır olan bir alıcı hakkında kafam karıştı. iletiler/alıcılar fikrini alabilirim

CEVAP
1 EKİM 2008, ÇARŞAMBA


Çok yapmacık bir örnek kullanarak tarif edilebilir sanırım. Hadi bir ArrayList içindeki tüm elemanları yazdıran: Java bir yöntem var

void foo(ArrayList list)
{
    for(int i = 0; i < list.size();   i){
        System.out.println(list.get(i).toString());
    }
}

Eğer böyle bir yöntem çağırırsanız şimdi: someObject.foo(NULL); muhtemelen liste, liste için çağrı bu durumda erişmeye çalıştığında bir NullPointerException almak için gidiyoruz.() boyut; Şimdi, muhtemelen hiç someObject ararsınız.böyle BOŞ değeri ile foo(NULL). Ancak, bazı insanlar, bazı yanılgılara someObject gibi ArrayList oluşturma çalışıyorsa NULL döndüren bir metodu ArrayList almış olabilirsiniz.foo(otherObject.() getArrayList);

Tabii bir de eğer böyle bir şey yaparsan başın derde girecek:

ArrayList list = NULL;
list.size();

Şimdi, Objective-C, eşdeğer yöntemi

- (void)foo:(NSArray*)anArray
{
    int i;
    for(i = 0; i < [anArray count];   i){
        NSLog(@"%@", [[anArray objectAtIndex:i] stringValue];
    }
}

Eğer aşağıdaki kodu var:

[someObject foo:nil];

hangi Java NullPointerException üretecek aynı durum var. Nil nesne erişilen ilk başta [yorum aralarında sayım] Ancak, yerine atan bir NullPointerException, Objective-C sadece return 0 kurallara uygun olarak yukarıda, böylece döngü çalışmayacak. Ancak, eğer biz set döngü çalıştırmak için bir kez, o zaman ilk önce bir mesaj göndermek için yorum aralarında [yorum aralarında objectAtİndex:i]; Bu da dönüş 0, ama beri objectAtİndex: bir işaretçi döndürür, ve bir işaretçi 0 sıfır/NULL, NSLog olacak geçirilen nil her zaman döngü. NSLog fonksiyonu değil, bir yöntem olsa da, eğer sıfır bir NSString geçerse (null) yazdırır.

Bazı durumlarda bir program ile yanlış olduğunu hemen söyleyebilirim bu yana daha güzel bir NullPointerException var, ama özel durumu yakalamak sürece, program kilitlenmesine. (C, bu şekilde BOŞ başvuru girişimi programı çökmesine neden olur.) Objective-C, bunun yerine muhtemelen çalıştırma davranış yanlış olur. Ancak, eğer bir yöntemi yok kırılırsa döner 0/sıfır/NULL/sıfırlanmış bir yapı, daha sonra bu kaydeder senden olması için kontrol etmek emin olun nesne ya da parametreleri yoktur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • Press Start

    Press Start

    4 HAZİRAN 2006
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006