如果我有NSMutableString
,例如
NSMutableString *foo = [[NSMutableString alloc] init];
如果我找不到对象foo = nil
,是否会将保留计数降低1,从而有效地释放内存?此时我是否需要从堆中重新分配foo才能使用它?
答案 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];
。