NSMutableString和nil用于内存管理

时间:2009-02-25 23:05:08

标签: iphone objective-c cocoa cocoa-touch

如果我有NSMutableString,例如

NSMutableString *foo = [[NSMutableString alloc] init];

如果我找不到对象foo = nil,是否会将保留计数降低1,从而有效地释放内存?此时我是否需要从堆中重新分配foo才能使用它?

5 个答案:

答案 0 :(得分:8)

请阅读the basic documentation。将变量foo设置为nil对其先前的内容不起作用。请记住,foo只是指向对象的指针;要使用它,你必须使它指向一个有效的对象。只是为了让它不再指向那个对象而不释放该对象。

答案 1 :(得分:5)

将nil分配给变量不会影响以前的值。保留计数仅降低release

你应该阅读Apple的Cocoa memory management guidelines。 Cocoa的引用计数系统并不困难,但它是你必须学习的东西,如果你没有正确学习它,你的程序会有很多微妙的错误会让你发疯。

答案 2 :(得分:4)

上面所说的每个人都是绝对正确的。您需要在该代码段中发布一个版本。

但是,请务必注意,如果这是正确的事情,分配到属性会降低保留计数。那就是:

foo = nil;         // doesn't lower
bar.foo = nil;     // probably does

属性看起来像普通变量,但它们确实不是;他们智能地处理自己的内存管理。当你和他们一起工作时,请记住这一点。

答案 3 :(得分:2)

是否会将保留计数降低1,从而有效释放内存?

没有

你应该使用

[foo release]

答案 4 :(得分:0)

foo = nil;不会降低对象的保留计数。它只会使foo无处而不是对象。要减少保留计数,您必须说[foo release];