将实例 ID 打印到 NSLog?

Posted

技术标签:

【中文标题】将实例 ID 打印到 NSLog?【英文标题】:Printing Instance ID to NSLog? 【发布时间】:2010-11-26 19:39:59 【问题描述】:

在一个类的 dealloc 方法中,我将如何打印出被释放实例的 ID(或其他一些唯一标识符)?

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

这可能吗?我只是想在控制台中获得更多反馈,以帮助学习。

非常感谢 -gary-

【问题讨论】:

【参考方案1】:

如果你特别想要对象的内存地址(如果你的类中没有实现,我想它可以被认为是一个“标识符”),你可以使用这个:

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

如果您有多个特定类的实例并试图确定哪个实例在何时被释放,这会很有帮助。

【讨论】:

关于字符串格式说明符的文档:developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…【参考方案2】:

试试这个:

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

这将向控制台输出有关该对象的更多信息。根据类,您将获得内存地址和类名或更详细的信息。如果您想在自己的类中提供更详细的内容,请覆盖此方法并返回您想要的任何内容:

-(NSString *)description 
    return @"Something useful about this object";

【讨论】:

太好了,我可以假设“self”只是访问类的默认描述吗? 没错 - NSLog() 函数将 %@ 替换为给定对象的描述。 NSObject 的 -description 方法提供了默认的 值。有关与 NSLog 相关的有用信息的更多信息,请参见此处:cocoadev.com/index.pl?NSLog 如果您想要不同班级的 ID 怎么办?例如。我有一个成员变量 NSMutableArray,我想打印它的实例 ID。 这样做没有错——这通常是你想要的——但我认为 dmkash 的答案更适合手头的问题。在描述覆盖的情况下,这不一定会像问题所要求的那样输出“唯一标识符”。

以上是关于将实例 ID 打印到 NSLog?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 实例变量与属性的区别

未将对象引用设置到对象的实例怎么解决

ios nslog怎么打印中文

如何将 QTextBrowser 的多个实例打印到一个 PDF 文件中?

错误:无法识别的选择器发送到实例

__NSCFString setHidden:无法识别的选择器发送到实例