通过defaultManager获取NSFileManager的实例并在主队列外使用它是否可以?
这段代码好吗?
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(q, ^{
NSFileManager *fm = [NSFileManager defaultManager];
});
答案 0 :(得分:25)
来自NSFileManager Class Reference:
可以从中调用共享NSFileManager对象的方法 安全多线程。但是,如果您使用委托来接收 有关移动,复制,删除和链接状态的通知 在操作中,您应该创建文件管理器的唯一实例 对象,将您的委托分配给该对象,并使用该文件管理器 开始你的行动。
答案 1 :(得分:8)
可以安全地从多个线程调用共享NSFileManager对象的方法。但是,如果使用委托接收有关移动,复制,删除和链接操作状态的通知,则应创建文件管理器对象的唯一实例,将委托分配给该对象,并使用该文件管理器启动你的运作。
答案 2 :(得分:5)
直接来自NSFileManager
documentation:
线程注意事项
共享NSFileManager的方法 可以安全地从多个线程调用对象。但是,如果你使用 代表接收有关移动,复制,状态的通知 删除和链接操作,您应该创建一个唯一的实例 文件管理器对象,将您的委托分配给该对象,然后使用 该文件管理员将启动您的操作。