2009-12-29 37 views
10

Tôi đang làm việc trên ứng dụng iPhone sử dụng Dữ liệu chính. Ứng dụng thực hiện cuộc gọi đến dịch vụ web, phân tích cú pháp tệp XML kết quả, sau đó tạo hoặc sửa đổi các đối tượng Dữ liệu cốt lõi trong ứng dụng của tôi. Tôi đã xử lý cuộc gọi dịch vụ web và phân tích cú pháp một cách không đồng bộ, nhưng tôi đã bàn giao dữ liệu được phân tích cú pháp trở lại luồng chính để thao tác các đối tượng Dữ liệu cốt lõi. Tôi cũng muốn chạy quá trình này trong chuỗi nền. (A tạm dừng thứ hai 1-2 không làm cho trải nghiệm người dùng tuyệt vời)Chủ đề NSPersistentStoreCoordinator có an toàn không?

Phương pháp hiển nhiên sẽ là để tạo ra một bối cảnh đối tượng được quản lý đặc biệt cho các chủ đề nền, nhưng sau đó tôi đọc dòng này trong Apple's Core Data Programming Guide:

Điều phối viên lưu trữ liên tục cung cấp cho đối tượng được quản lý của nó bối cảnh mặt tiền của một cửa hàng ảo. Đối với các hoạt động hoàn toàn đồng thời, bạn cần một điều phối viên khác nhau cho mỗi luồng.

Vì vậy, đây là điểm bắt đầu: bạn không thể có hai số NSPersistentStoreCoordinator s cung cấp quyền truy cập vào cùng một cửa hàng. Tuy nhiên, cuốn sách dữ liệu cốt lõi của Marcus Zarra khẳng định rằng NSPersistentStoreCoordinator an toàn luồng và sẽ tuần tự hóa các yêu cầu I/O (trang 157).

Ai đó có thể xóa nội dung này cho tôi không? Có thể có một bối cảnh đối tượng được quản lý thứ hai chạy trên một chuỗi riêng biệt chia sẻ cùng một NSPersistentStoreCoordinator với luồng chính không? Hay, ngắn gọn hơn, là NSPersistentStoreCoordinator an toàn chỉ?

+0

FYI bạn có thể có nhiều PSC đang mở cùng một tệp lưu trữ. –

Trả lời

16

Zarra sau đó chỉ ra rằng ngữ cảnh khóa cửa hàng, vì vậy bạn có thể sử dụng cùng một NSPersistentStoreCoordinator trên các chủ đề.

Mặc dù NSPersistentStoreCoordinator không chủ đề an toàn trong hai, các NSManagedObjectContext biết làm thế nào để khóa nó đúng khi sử dụng. Do đó, chúng tôi có thể đính kèm nhiều đối tượng NSManagedObjectContext vào một số NSPersistentStoreCoordinator duy nhất là mà chúng tôi muốn mà không sợ bị va chạm.

2

Có thể có bối cảnh đối tượng được quản lý thứ hai chạy trên một chuỗi riêng biệt chia sẻ cùng một NSPersistentStoreCoordinator với chuỗi chính không?

Có! Tôi khuyên bạn nên đọc phần tương ứng của cuốn sách của Zarra cẩn thận trước khi mạo hiểm vào truy cập đa luồng tới CoreData.

Hoặc, ngắn gọn hơn, là NSPersistentStoreCoordinator thread-safe?

Vâng, từ 'thread-safe' có sắc thái ý nghĩa trong tài liệu của Apple, vì vậy hãy cẩn thận! Xem phần này blog article để có giải thích tốt đẹp.

+0

Tôi vừa ra lệnh cho cuốn sách của Zarra, nhưng trong khi đó, làm thế nào về bối cảnh được quản lý? Tôi có thể có một ngữ cảnh đơn được chia sẻ bởi nhiều luồng không? –

+0

Không, bạn cần một ngữ cảnh riêng biệt cho mỗi luồng, nhưng chúng có thể được liên kết với cùng một điều phối viên.Nếu bạn đặt hàng cuốn sách Lập trình Pragmatic trực tiếp từ họ, sau đó bạn có thể tải ebook ngay lập tức trong khi một trong những giấy tàu. – gerry3

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