2009-07-16 22 views
7

Adres Defteri belgelerinden ve temel CoreData uygulamasının anlaşılmasından duyumlarım, Adres Defterinin iş parçacığı için güvenli olması gerektiğini ve birden çok ileti dizisinden sorgular yapmanın sorun çıkarmaması gerektiğini önerir. Ancak, dokümanlarda iş güvenliği konusunda açık bir tartışma bulmakta zorlanıyorum. Bu, birkaç soru ortaya çıkarır:Adres Defteri iş parçacığı güvenliği ve performans

  • Salt okunur erişim için birden çok iş parçacığında + sharedAddressBook'u kullanmak güvenli midir? Cevabın evet olduğuna inanıyorum.
  • Arka plandaki konulara yazma erişimi için bunun yerine + addressBook kullanmanız gerekir (ve değişikliklerinizi el ile kaydedin). Bunu doğru anlıyor muyum?
  • Birden çok iş parçacığı üzerinde birden çok eşzamanlı sorgunun Adres Defterini yapmasının performans etkisini kimsenin araştırdığı var mı? Bu, çoklu iş parçacıklarında birden çok CoreData sorgusu yapma performansına çok benzer olmalıdır. Benim mantığım, SQLLite'i vurduklarında serileşeceklerini varsaydığımdan beri paralel sorgulamalar yaparak çok az kazanacağım, ama burada emin değilim.

Adres Defterine karşı düzinelerce sorgu (bazı karmaşık) yapmalıyım ve UI'yi (şu anda var olan) engellememek için NSOperation kullanarak arka plan iş parçacığı üzerinde yapıyorum. Benim temel sorusu, maksimum eşzamanlı işlemleri 1'den büyük bir değere ayarlamanın mantıklı olup olmadığı ve eğer uygulama başka bir iş parçacığı üzerinde aynı anda Adres Defterine de yazıyorsa, herhangi bir tehlike olup olmadığıdır.

+0

Şu anda Adres Defteri Çerçevesi'nin (her zaman böyle olmamıştı) Çekirdek Verileri kullanması, göz ardı etmeniz gereken bir uygulama ayrıntısıdır ve iş parçacığı güvenliğini garanti etmemektedir. Adres Defteri API'sinin iş parçacığı güvenli olduğunu belirten belgelere bir bağlantı sağlayabilir misiniz? Dokümanlarda belirtilen iş parçacığı politikasını bulamadım. –

+0

Ben de bulamıyorum. İlk paragrafta yaptığım nokta buydu. Herhangi bir dokümanda AB ile iş parçacığı hakkında açık bir tartışma bulamıyorum. Ancak, iş parçacığının güvenli olmadığı varsayımı, gerekli olmayan (ve düzgün bir şekilde nasıl uygulanacağına dair belgeyi bulamıyorum) kapsamlı bir karmaşıklık yaratır ve böylece soruyu ortaya çıkarır. –

+3

Bir alt kümesi, ya da bunun bir alt kümesi, iş parçacığı olduğu için kötümser olmanız ve olmadığını varsayınız. –

cevap

7

Bir API, iş parçacığı olmadığını söylüyorsa, öyle değil. Mevcut uygulama iş parçacığı güvenli olsa bile, gelecekte olmayabilir. Diğer bir deyişle, birden fazla iş parçacığı kullanarak AB kullanmayın.

Bir kenara bakarsak, CoreData tabanlı olması, iş parçacığının güvenli olacağını düşünmenizi sağlar mı? CoreData, yalnızca bir iş parçacığı üzerinde bir içeriğe erişmek için güvenli olduğu bir iş parçacığı modeli kullanır, bağlamdaki tüm nesnelerin aynı iş parçacığına erişilmesi gerekir.

Bu, paylaşılan bir NSManagedObjectContext'i kullanmaya devam ederse, sharedAddressBook iş parçacığı güvenli olmayacağı anlamına gelir. Bir şey yapması ve derhal elden çıkarması gereken her zaman AB'nin yeni bir bağlam yaratması ya da her bir iş parçacığı için bir bağlam yaratması ve her zaman uygun bağlamı kullanması (muhtemelen threadDictionary içinde bir ref dosyasını saklamak) durumunda güvenli olacaktır. . Her iki durumda da, bağlamlar sürekli olarak yok edileceği için NSManagedObjects olarak herhangi bir şey depolamak güvenli olmayacaktır; bu, her ABRecord'un bir NSManagedObjectID'yi depolamak zorunda kalacağı anlamına gelir; böylece, gerektiğinde nesneyi uygun bağlamda yeniden oluşturabilir.

Açıkçası bunların hepsi mümkündür, ne yapılabilir, ancak açık bir şekilde uygulanması zor değildir.

+1

CoreData ile iş parçacığı/bağlam sorunları, bu yüzden + addressBook yönteminin varlığına işaret etmemin nedeni, ayrı bir bağlam sağlamazsa, hangi olası amaca hizmet eder? (Verilmiş, diğerleri aynı soruyu docs + shareAddressBook ve + addressBook'un farkı nedir?) Vida dişi emniyetinin olmaması, kilitleme mekanizmasının olmaması, mainThread'in gerekip gerekmediğine dair herhangi bir rehber olmaması ve operasyonun aşırı yavaşlığı, temel soru hala oradadır: Birçok AB sorgusu gerektiren uygulamalar ... Radar süresi ... –

İlgili konular