10

Bạn có thể nhận một phiên bản NSFileManager thông qua defaultManager và sử dụng nó bên ngoài hàng đợi chính không?Chủ đề NSFileManager có an toàn không?

Mã này có ổn không?

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

dispatch_async(q, ^{ 

    NSFileManager *fm = [NSFileManager defaultManager]; 

}); 

Trả lời

23

Từ NSFileManager Class Reference:

Các phương pháp của đối tượng NSFileManager chia sẻ có thể được gọi từ nhiều chủ đề một cách an toàn. Tuy nhiên, nếu bạn sử dụng đại biểu để nhận được thông báo về trạng thái di chuyển, sao chép, xóa và liên kết hoạt động , bạn nên tạo một phiên bản duy nhất của đối tượng quản lý tệp , gán đại biểu của bạn cho đối tượng đó và sử dụng tệp đó người quản lý để bắt đầu hoạt động của bạn.

7

Từ documentation:

Các phương pháp của đối tượng NSFileManager chia sẻ có thể được gọi từ nhiều luồng một cách an toàn. Tuy nhiên, nếu bạn sử dụng đại biểu để nhận thông báo về trạng thái di chuyển, sao chép, xóa và liên kết các hoạt động, bạn nên tạo một cá thể duy nhất của đối tượng trình quản lý tệp, gán đại biểu của bạn cho đối tượng đó và sử dụng trình quản lý tệp đó để bắt đầu hoạt động của bạn.

5

Trực tiếp từ NSFileManager documentation:

cân nhắc Threading

Các phương pháp của đối tượng chia sẻ NSFileManager thể được gọi từ nhiều luồng một cách an toàn. Tuy nhiên, nếu bạn sử dụng một đại biểu để nhận thông báo về trạng thái di chuyển, sao chép, xóa và liên kết các hoạt động, bạn nên tạo một trường hợp duy nhất là đối tượng trình quản lý tệp, gán đại biểu của bạn cho đối tượng đó và sử dụng trình quản lý tệp để bắt đầu hoạt động của bạn.

+1

lol, trong vòng chưa đầy 2 phút, ba câu trả lời gần như giống hệt nhau – Martin

Các vấn đề liên quan