2012-06-29 22 views
63

Olası Çoğalt:
alloc, init, and new in Objective-CiOS'ta [Class new] ve [[Class alloc] init] arasındaki fark nedir?

Ben [Class new] ve [[Class alloc] init] hakkında biraz karıştı. nesnesini [Class new] ve [[Class alloc] init] kullanarak tanımladım.

(1). NSMutableArray *content = [NSMutableArray new]; 
(2). NSMutableArray *content = [[NSMutableArray alloc] init]; 

Sorum [Class new] ve [[Class alloc] init] arasındaki farklar hakkındadır. Benim için (1) ve (2) benzerdir. (1) ve (2) benzer ise, o zaman neden [Class new] ile karşılaştırıldığında [[Class alloc] init] kullanıyoruz? Bence biraz fark olmalı.

Farklılıklarını açıklar mısınız? & İşte

+1

bu bağlantıyı başvurabilirsiniz http://macresearch.org/difference gider söyleyebiliriz sonuçlandırmak -Yeni-in-init-ve-yeni – janusbalatbat

cevap

123

Alloc: NSObject sınıf yöntemi. Alıcı sınıfın yeni bir örneğini döndürür. NS0bject öğesinin örnek yöntemi. Alt sınıflar tarafından, yeni bir nesneyi (alıcı) belleğe alındıktan hemen sonra tahsis etmesi için başlattı.

Yeni: NSObject Sınıfı yöntemi. Alıcı sınıfın yeni bir örneğini ayırır, bir init mesajı gönderir ve başlatılan nesneyi döndürür.

Yayın: NSObject temsilci Alan Örnek yöntemi. Alıcının referans sayısını azaltır.

Autorelease: NSObject temsilcisinin örnek yöntemi. Alıcıyı mevcut otomatik yükleme havuzuna ekler.

tut: NSObject temsilci Örnek yöntemi. Alıcının referans sayısını artırır.

Kopya: NSObject delegesi Örnek yöntemi. Alıcının bir kopyası olan yeni bir örnek döndürür.Yani

biz

alloc init

yeni = alloc + init

+1

Harika! Bu yardımcı oldu! –

+0

Delege'lerin bununla hiçbir ilgisi yoktur. NSObject' ** protokolü ** demek istiyor musunuz? – dreamlax

9

: alloc, init, and new in Objective-C

Esasında geleneksel karşı çağdaş bir soru. Yeni init arasındaki en doğrudan avantaj, birçok özel init yönteminin olmasıdır.

26

+new yöntemi, +alloc ve -init için kısaltılmıştır. Sahiplik semantiği aynıdır. +new'u kullanmanın tek yararı, daha özlü olmasıdır. Sınıfın başlatıcısına argümanlar sağlamanız gerekiyorsa, bunun yerine +alloc ve -initWith... yöntemlerini kullanmanız gerekecektir.

İlgili konular