2009-03-12 14 views
8

Noob soru:NSString nesnelerinin atama ve init olması gerekir mi?

Ben Bir nesne oluşturmak istediğinizde, itiraz alloc ve init gerektiğini izlenim şu anda değilim.

Ancak, ben bir NSString nesne bildirildi görülen birkaç örnek kodları gördüm, ama ben ... Aşağıdaki hiçbir alloc veya init mesajlarını görmek

Çok basit bir örnek:

NSString *myString = @"Hello World"; 

NSLog(@"%@" , myString); 

Birisi bunun neden böyle olduğunu açıklayabilir mi?

cevap

12

bildirme bir değişken herhangi bir bellek bırakmayı gerektirmez.

Örnekleme nesnesi yok. sen, derleyici kodlanmış dizesinden oluşturduğu zaten varolan bir nesneye Referansınız ayarlarken alloc veya sizin örnekte

kopya ararsanız Ve sadece yeni bir nesne örneğini. Ve hafızasını yönetmek zorunda değilsin çünkü onu sen yaratmadın.

Açıkça açıklamamı bilmiyorum.

DÜZENLEME:

yanıtlandıysa bir soru zaten var gibi görünüyor: kodunuzda bir NSString değişmezi gömmek

Is a literal NSString autoreleased or does it need to be released?

+0

Teşekkür ederim Sergio ... Şimdi anlıyorum. – ChrisR

+1

Foundation, Core Foundation'ın bir başlık dosyasında açıklanan "@" ... "adlı yapı mı yoksa derleyici bu sorunları halleder mi? –

6

, örneğin @"hello, world' olarak, derleyici özgüler yürütülebilir dosyanızda bunun için alan ve belleğe yüklendi ve programınız başladığında başlatıldı.

Uygulamanızın bir parçası olduğu için, uygulamanızın tüm kullanım ömrü boyunca yaşar. Onu tutmaya ya da bırakmaya gerek yok. Oluşturduğunuz NSString *myString değişkeni, derleyicinin NSString literal değerini yazdığı yerdeki bir işaretçidir.