SORU
13 Kasım 2010, CUMARTESİ


Objective-C bugün ivan'ın ve özellikleri arasında ne fark var

Objective-c bugün ivan'ın ve özelliklerini kullanarak bu 3 yol arasında anlam farkı nedir?

1.

@class MyOtherObject; 
@interface MyObject {
}
@property (nonatomic, retain) MyOtherObject *otherObj;

2.

#import "MyOtherObject.h"
@interface MyObject {
    MyOtherObject *otherObj;
}
    @property (nonatomic, retain) MyOtherObject *otherObj;

3.

    #import "MyOtherObject.h"
    @interface MyObject {
        MyOtherObject *otherObj;
    }

CEVAP
13 Kasım 2010, CUMARTESİ


Sayı 1ileri kod miktarını derleyici tarafından görülen ve linker en aza indirmek için MyOtherObject sınıf ilan ederek diğer iki farklıdır ve aynı zamanda döngüsel başvurular kaçının. Eğer bunu yaparsanız, bunu bu şekilde koymak unutmayın #içine al .m dosya.

Bir @emlak ilan ederek, (@eşleşen içinde sentez .m) dosyası, otomatik oluşturmak bellek semantik sizin belirlediğiniz nasıl ele ile erişimci yöntemleri. Çoğu nesneler için başparmak kuralı Korumak, ama NSStrings, örneğin Kopyasını kullanmalısınız. Tekiz ve Delegeler genellikle Ata kullanmanız gerekir oysa. El yazma erişenleri bu yazarak ve aptalca hatalar bir sürü kaydeder bu kadar sıkıcı ve hata eğilimli.

Ayrıca, sentezlenen bir özellik ilan erişimci yöntemi böyle nokta işaretini kullanarak arama sağlar:

self.otherObj = someOtherNewObject; // set it  
MyOtherObject *thingee = self.otherObj; // get it 

Normal yerine-geçen mesaj yolu:

[self setOtherObject:someOtherNewObject]; // set it
MyOtherObject *thingee = [self otherObj]; // get it 

Perde arkasında gerçekten buna benzeyen bir yöntem arıyorsun:

- (void) setOtherObj:(MyOtherObject *)anOtherObject {

    if (otherObject == anOtherObject) {
    return;  
    }

    MyOtherObject *oldOtherObject = otherObject; // keep a reference to the old value for a second
    otherObject = [anOtherObject retain]; // put the new value in  
    [oldOtherObject release]; // let go of the old object
} // set it

...ya da bu

- (MyOtherObject *) otherObject {  
    return otherObject;
} // get it

Popo, tam bir baş belası olabilir. Şimdi yapmak içinher ıvarsınıfta. Eğer doğru yapmak eğer, bir bellek sızıntısı. Sadece en iyi derleyici çalışma yapalım.

GörüyorumSayı 1ıvar. bir yok Bu bir yazım hatası olmadığını varsayarak, @tesiste @ / direktifler için ıvar de, perde arkasında ilan edecek sentez, çünkü sorun değil.Bu Mac OS X için yeni Snow Leopard ve iOS4 olduğuna inanıyorum.

Sayı 3bu set oluşturulan yok Kendin yazmak zorundasın. Eğer erişimci yöntemlerini yan etkilere sahip olmak istiyorsanız, yukarıda gösterildiği gibi standart bellek yönetimi dansını yapacağını, ne gerekiyorsa yapın, erişimci yöntemi içinde. Sana bir özelliği sentezyanı sıra kendi yazmako zamanseninsürüm önceliğe sahiptir.

Kapağı her şeyi yaptım mı?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dougownsall

    dougownsall

    7 EKİM 2007
  • Fullscreen

    Fullscreen

    23 Mart 2006
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009

İLGİLİ SORU / CEVAPLAR