假设我执行以下操作(foo 从某个对象开始):
[foo release];
// STUFF with foo
[foo retain];
只要我不重新分配 foo,最后我仍然会拥有相同的 foo,对吗?在 //STUFF 期间我不会冒失去 foo 的风险,是吗?
我想我正在确保我对发布的理解是正确的。如果我释放 foo,它实际上不会消失,直到它的所有句柄都消失了。换句话说,foo 必须分配给 //STUFF 中的某个其他对象,或者 foo 必须超出 //STUFF 中的范围(并且可能创建了一个新的 foo)才能获得实际的原始 foo要删除的对象,对吗?
编辑动机:
我想这样做的原因是可以说我有以下 switch 语句:
switch (test)
{
case 1:
foo = [A alloc];
[foo inita];
break;
case 2:
foo = [B alloc];
[foo initb];
break;
case 3:
[foo setupc];
break;
case 4:
f = [D alloc];
[foo initd];
break;
}
在切换之前释放 foo 并在结束时保留它是有意义的。除了案例 3。所以,我在想如果可以安全地执行我建议的操作,它可能会使代码更简单。
当然,我可以在每个 alloc/init 周围放置一个释放/保留对,但这是很多重复的代码......
A [foo autorelease] 然后保留可能就可以解决问题。