iOS ARC内存管理

时间:2013-11-19 22:36:50

标签: ios memory-management automatic-ref-counting

这可能是一个愚蠢的问题,但我正在努力解决循环中一些奇怪的内存增加问题。所以我想我可能对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东西)。我不确定上述功能是否是罪魁祸首,可能是完全不同的......

感谢您启发我......;)

1 个答案:

答案 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;
    }
}
相关问题