Tôi đã sử dụng api AddressBook của iPhone một thời gian rồi. Nhưng làm một số refactoring để cải thiện hiệu suất ứng dụng tôi đã quyết định "tái sử dụng" ABAddressBookRef trở lại bởi AddressBookCreate bởi vì tôi nhận thấy có những cải tiến hiệu suất lớn làm điều đó. Tuy nhiên, tôi nhận được lỗi EXEC_BAD_ACCESS bây giờ ngẫu nhiên, và tôi nghĩ lý do là trong "caveat" trong việc thực hiện tham chiếu iPhone: http://developer.apple.com/iphone/library/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/300-BasicObjects/BasicObjects.html#//apple_ref/doc/uid/TP40007744-CH3-SW1Thao tác xử lý AddressBook đa luồng iPhone
Quan trọng: Trường hợp của ABAddressBookRef không thể được sử dụng bởi nhiều chủ đề. Mỗi luồng phải tạo một cá thể riêng bằng cách gọi ABAddressBookCreate. Bây giờ, tôi nghĩ rằng đơn giản chỉ có nghĩa là nó không phải là an toàn thread vì vậy tôi đã phải đồng bộ hóa truy cập vào API, nhưng có lẽ tôi đã sai, và có một số lý do khác khiến nhiều luồng lộn xộn cấu trúc dữ liệu?
Ai đó có thể xác nhận xem đó có thực sự là vấn đề an toàn cho luồng không (vì vậy @synchronize sẽ hoạt động) hoặc một số vấn đề khác?
Chúc mừng
Hi Lirik, vâng, tôi đã nhận được cùng một kết luận ... nó có vẻ như một cách rất xấu để xây dựng một khung AB phải trung thực .. nhà phát triển còn lại để xây dựng một (tương đối) phức tạp đa luồng giải pháp để giải quyết một vấn đề chung cần được kiến trúc, nhưng những gì có thể làm .. Tôi sẽ phải bánh xe trong những khẩu súng lớn và làm điều đó một cách khó khăn .. cảm ơn bạn! – Marco
Trên thực tế, tôi đã xây dựng một giải pháp khác trước khi đọc câu trả lời của bạn, nơi tôi đã lưu một từ điển ABRefs với tên luồng suy nghĩ (ngây thơ) rằng iPhone tái tạo các luồng từ một threadpool ... nhưng helas, không xúc xắc ... nó xây dựng một chủ đề mới mỗi khi bạn tách một ... vì vậy tôi cuối cùng đã nhận được cùng một kết luận của bạn – Marco
@Lirik và @Marko, tôi có cùng một vấn đề. Tôi đã thấy vấn đề đa luồng và đã triển khai trình bao bọc AB khá đẹp từ đầu. Nhưng tôi vẫn có một lỗi lớn - đôi khi ứng dụng gặp sự cố và đôi khi nó xóa tất cả các liên hệ khỏi AB. Tôi đã kiểm tra tripple rằng tất cả các phương pháp sử dụng thể hiện AB làm điều đó từ thread được quản lý bởi wrapper này. –