Objective c 目标c-释放问题

Objective c 目标c-释放问题,objective-c,Objective C,可能重复: 你好,, 我有以下代码: NSNumber *number = [NSNumber numberWithInt:5]; int i = [number retainCount]; [number release]; i = [number retainCount]; [number release]; i = [number retainCount]; 问题是在第2行中,参数i的值是2 第4行的值是1。 第6行的值仍然是1 首先,我不明白为

可能重复:

你好,, 我有以下代码:

 NSNumber *number = [NSNumber numberWithInt:5];
 int i = [number retainCount];
 [number release];
 i = [number retainCount];
        [number release];
        i = [number retainCount];
问题是在第2行中,参数i的值是2 第4行的值是1。 第6行的值仍然是1

首先,我不明白为什么在初始*编号之后,重新计数是2而不是1?? 第二,我不明白为什么在发布2次后,retaincount不是0?
不管我释放对象多少次,重新计数保持为1。

问题是,除非你真的知道自己在做什么,否则你永远不应该查看对象的“重新计数”,这只会让你感到困惑

发生的事情是NSNumber在幕后做了些什么。我不知道是什么,我通常也不在乎。如果我创造了一个卑鄙的东西,我有责任释放它。只要我履行我的职责,一切都会顺利进行

在您的特定示例中,您将获得对“NSNumber”的引用并将其发布两次。由于您不拥有该对象,因此根本不应该释放它


澄清一下,你不应该关注保留计数的原因是它经常会误导你。从评论中的链接中引用@chuck

如果您怀疑自己有漏洞,应该使用真正的调试工具进行检查,而不是通过戳保留计数。对于您正在编写的代码,您应该主要关注遵循我上面链接的指导原则


首先谢谢你的帮助。我不明白为什么我不拥有那个对象(我创建了它!)是否有我创建的对象不需要释放?像在功能结束时死去的对象?我如何知道我创建的对象是否是带有自动释放的init?感谢阅读一般来说,除非您使用“alloc”、“copy”或“new”来创建对象,否则您不拥有它。。。。不要担心得不到这一点,对于刚接触这种语言的人来说,这可能是obj-c中最困难的部分。一定要担心得不到这一点。在您了解内存管理的工作原理之前,您的应用程序要么像筛子一样泄漏,要么由于过度释放而崩溃。不要担心你会感到困惑,每个人一开始都会感到困惑。