【发布时间】:2013-12-06 17:57:38
【问题描述】:
我不精通objective-c,如果这是一个愚蠢的问题,请原谅我。我创建了一个后台线程来解析目录中存在的文件列表,目录中的文件可以随时更改。
我在循环的每次迭代中调用“contentsOfDirectoryAtPath”,我的分配突然超过 300mb。我不知道如何让 ARC 释放返回的数组。有人可以在这里指出我正确的方向吗?
-(void) offlineModeThread
{
NSString *dataDir = [ViewController getDataDirectory];
NSFileManager *nfm = [NSFileManager defaultManager];
while(1)
{
NSArray *files = [nfm contentsOfDirectoryAtPath:dataDir error:nil];
/*
if(files == nil)
break;
if([files count] <= 0)
{
files = nil;
[NSThread sleepForTimeInterval: 5.0f];
continue;
}
if(![ViewController obtainLock])
{
files = nil;
continue;
}
*/
//[ViewController releaseLock];
files = nil;
}
}
如您所见,我尝试通过将 'files' 设置为 nil 来释放数组,但它不起作用。
【问题讨论】:
-
你使用ARC项目吗?
-
附带说明:[NSFileManager defaultManager] 不是线程安全的,请改用 [[NSFileManager alloc] init]。
-
@San 我会先阅读the documentation,然后再提出这样的要求。
-
为什么每次迭代都获取目录的内容?只需将赋值移到 while 循环之外。
-
@CodaFi 是 [NSFileManager defaultManager] 如果我们没有将委托设置为 NSFileManager,则线程安全。接受!
标签: ios iphone objective-c