2009-09-09 12 views
12

Bir sınıf için dealloc yönteminde, ayrılan örnek için kimliği (veya başka bir benzersiz tanıtıcı) nasıl yazdırırım?Örnek Kimliği Yazdırma NSLog'a mı?

- (void)dealloc { 
    NSLog(@"_deallocing: ??"); 
    [super dealloc]; 
} 

Bu mümkün mü? Konsolide öğrenmeye bir yardım olarak biraz daha fazla geri bildirim almaya çalışıyorum. konsola nesnesi hakkında

- (void)dealloc { 
    NSLog(@"_deallocing: %@", self); 
    [super dealloc]; 
} 

çıktısı verir biraz daha bilgi:

çok teşekkürler bu deneyin

cevap

6

-gary-. Sınıfa bağlı olarak, bir hafıza adresi ve sınıf adı veya daha ayrıntılı bir şey alırsınız. Özellikle ben "bir düşünülebilir herhalde nesnenin bellek adresi (isterseniz

-(NSString *)description { 
    return @"Something useful about this object"; 
} 
+0

Mükemmel, "ben" in sadece sınıfın varsayılan açıklamasına eriştiğini varsayabilir miyim? – fuzzygoat

+0

Doğru - NSLog() işlevi,% @ öğesinin verilen nesnenin açıklamasıyla değiştirir. NSObject'in -description yöntemi varsayılan değerini sağlar. NSLog ile ilgili yararlı şeyler hakkında daha fazla bilgi için buraya bakın: http://www.cocoadev.com/index.pl?NSLog – iKenndac

+0

Farklı bir sınıfın kimliğini istiyorsan ne olur? Örneğin. NSMutableArray üyesi değişkeni var ve örnek kimliğini yazdırmak istiyorum. –

52

: Eğer kendi sınıflarında daha detaylı bir şey vermek dilediğiniz bu yöntemi ve getiri geçersiz kılmak istiyorsanız siz) kimse sınıfta uygulanan yoksa tanımlayıcı", bu kullanabilirsiniz:

NSLog(@"deallocing %p", self); 

belirli bir sınıfın birden fazla örneği varsa ve hangi belirlemek için çalışıyorsanız, bu oldukça yararlı olabilir ne zaman ayrılıyor.

+0

Teşekkür ederim dmkash, bu iyi bir nokta, çok takdir. – fuzzygoat

+0

Dize biçimi belirticileriyle ilgili belgeler: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html – LopSae