我正在阅读有关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编译的第三方库中,会发生什么?
答案 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?