使用ARC时如何释放内存?

时间:2012-06-18 15:31:39

标签: iphone automatic-ref-counting

我正在阅读有关ARC的文件,并且遇到了让我困惑的部分。请任何人都可以帮助我。 我有两个问题: 1.当没有变量指向它时,我知道ARC释放对象。现在假设我有一些方法说:(NSString *)returnString,其返回类型是NSSTring;那么在方法returnString中声明的变量会发生什么?我知道接收变量会在调用returnString的方法范围之外得到释放,但是在returnString内部的变量会发生什么。

-(NSSTring *)returnString
{
   NSString *str = //Some value;

   return str;//What will happen to this.
}

和 其他方法:

-(void)useString
{
   NSString *str1 = [self returnString];  //It will get release when this method gets over.
}

2.如果returnString位于某些未使用ARC编译的第三方库中,会发生什么?

2 个答案:

答案 0 :(得分:2)

ARC只在编译时插入[... retain][... release]方法调用。在你的情况下,它看到'str'是一个局部变量,并在声明之后添加一个autorelease方法调用。所以真的,内存以相同的方式被释放,但你不必担心它,ARC为你做了。

答案 1 :(得分:0)

对于您的第一个问题,ARC将负责为您保留和释放。任何时候你仍然保持对变量的引用,ARC应该坚持下去。在您的特定示例中,字符串可能会作为自动释放的对象返回,但实际的实现对您来说是隐藏的。

对于第二个问题,您可以将库标记为不使用ARC以保持手动保留/释放。为此,请参阅此问题:ios5 ARC what is the compiler flag to exclude a file from ARC?