这可能是一个愚蠢的问题,但我正在努力解决循环中一些奇怪的内存增加问题。所以我想我可能对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东西)。我不确定上述功能是否是罪魁祸首,可能是完全不同的......
感谢您启发我......;)
答案 0 :(得分:0)
您可以使用@autoreleasepool来降低内存水印级别
e.g。
for (/**/) // some loop
{
@autoreleasepool
{
// some code inside loop
}
}
或者您可以将@autoreleasepool
放在方法
+(NSString *)getDocPathToFile:(NSString *)filename{
@autoreleasepool {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:fn];
return path;
}
}