2013-03-19 27 views
8

Trong ứng dụng iOS của tôi, tôi đang thực hiện một số công việc trong một chủ đề nền (sử dụng performSelectorInBackground). Trong chủ đề này, tôi đang sử dụng NSJSONSerialization và phương pháp lớp học để phân tích một chuỗi JSON:Phương pháp lớp và an toàn chủ đề (NSJSONSerialization)

self.json = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil]; 

Đây có phải là phương pháp lớp (JSONObjectWithData) chủ đề an toàn không? Tôi có thể chắc chắn về điều này không? Nó được viết ở đâu trong tài liệu?

Tôi biết rằng các phương pháp thể hiện thường là không an toàn chủ đề trừ khi tài liệu cho biết. Tôi có thể nói chung rằng các phương thức lớp học là an toàn chủ đề, trừ khi được chỉ định khác?

+0

Cách tốt nhất là làm cho hoạt động song song trên [NSJSONSerialization JSONObjectWithData:] gọi, và xem nếu bạn có vấn đề reentrancy. Nếu không ai nói với bạn rằng đó là chủ đề an toàn, thì nó không phải là chủ đề an toàn;) –

+0

Thật không may có vẻ như tài liệu mô tả an toàn luồng chưa được cập nhật để hiển thị 'NSJSONSerialization'. http://developer.apple.com/library/ios/#Documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html –

+0

Bạn muốn sử dụng self.json, nếu bạn làm cho chuỗi đó an toàn thì nó có hoạt động không? – Exploring

Trả lời

-1

Nội dung được quản lý không phải là chủ đề an toàn. Bạn có thể chạy mã trên mainthread của bạn hoặc chạy nó trong nền và sử dụng NSNotificationCenter để bắt đầu tải lại giao diện người dùng của bạn khi thread nền được xử lý xong.

+2

Câu hỏi (như tôi đã hiểu) là liệu có an toàn khi gọi '[NSJSONSerialization JSONObjectWithData: ...]' từ nhiều luồng cùng một lúc, không phải về việc sửa đổi giao diện người dùng khỏi chuỗi nền. –

1

Tôi đoán một chút ở đây.

Các Threading Programming Guide bang

đối tượng Immutable nói chung là thread-safe; khi bạn tạo chúng, bạn có thể chuyển các đối tượng này đến và đi một cách an toàn.

Gọi phương thức lớp có nghĩa là gửi thư đến đối tượng lớp và đối tượng lớp không thay đổi. Kết luận của tôi sẽ là an toàn khi gọi các phương thức lớp học từ các vị trí khác nhau.

+1

Trừ khi phương thức lớp liên quan đến trạng thái toàn cục, điều này có thể khó xác định. –

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