0

我正在阅读有关 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编译会怎样?

4

2 回答 2

2

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

于 2012-06-18T15:38:59.953 回答
0

对于您的第一个问题,ARC 将负责为您保留和释放。每当您仍在维护对变量的引用时,ARC 都应该保留它。在您的具体示例中,字符串可能会作为自动释放的对象返回,但实际的实现对您是隐藏的。

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

于 2012-06-18T15:42:20.490 回答