【发布时间】:2013-11-19 22:36:50
【问题描述】:
这可能是一个愚蠢的问题,但我正在努力解决循环中一些奇怪的内存增加问题。所以我想我可能对 ARC 有理解上的问题。
说,我有这样的功能:
+(NSString *)getDocPathToFile:(NSString *)filename{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:fn];
return path;
}
现在,像 fileManager、paths、documentsDirectory 和 path 这样的实例化变量会发生什么?在返回值后它们是否被销毁,因此不占用任何内存?
为了进一步解释这一点:我在循环中多次调用此方法。现在,在仪器中,我可以看到CFString (immutable) 中的内存不断增加,但我无法追踪分配 CFString 的位置(据我所知,我没有使用任何 CoreFoundation 东西)。我不确定上述函数是否是罪魁祸首,可能是完全不同的东西......
感谢您启发我... ;)
【问题讨论】:
-
您的变量实际上很弱。该函数结束后将被 ARC 释放。该函数本身将创建一个新的 NSString 实例,您将把它分配给一个变量。内存将一直保留,直到不再指向该新字符串。
-
太好了,感谢您的澄清...
标签: ios memory-management automatic-ref-counting