NSFileManager线程安全吗?

时间:2013-03-22 13:57:23

标签: objective-c cocoa-touch concurrency grand-central-dispatch nsfilemanager

通过defaultManager获取NSFileManager的实例并在主队列外使用它是否可以?

这段代码好吗?

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(q, ^{

    NSFileManager *fm = [NSFileManager defaultManager];

});

3 个答案:

答案 0 :(得分:25)

来自NSFileManager Class Reference

  

可以从中调用共享NSFileManager对象的方法   安全多线程。但是,如果您使用委托来接收   有关移动,复制,删除和链接状态的通知   在操作中,您应该创建文件管理器的唯一实例   对象,将您的委托分配给该对象,并使用该文件管理器   开始你的行动。

答案 1 :(得分:8)

来自documentation

  

可以安全地从多个线程调用共享NSFileManager对象的方法。但是,如果使用委托接收有关移动,复制,删除和链接操作状态的通知,则应创建文件管理器对象的唯一实例,将委托分配给该对象,并使用该文件管理器启动你的运作。

答案 2 :(得分:5)

直接来自NSFileManager documentation

  

线程注意事项

     

共享NSFileManager的方法   可以安全地从多个线程调用对象。但是,如果你使用   代表接收有关移动,复制,状态的通知   删除和链接操作,您应该创建一个唯一的实例   文件管理器对象,将您的委托分配给该对象,然后使用   该文件管理员将启动您的操作。