2010-11-18 26 views
1

İleti argümanı (dizgi) analiz edilerek, eylem yöntemi tüm arama nesnesi olan bir NSSearchField aldım.NSSearchField'ın donması nasıl sağlanmaz?

Şimdi, arama nesnesi (büyük bir diziyi besleyen), yoğun bir şekilde arama yoğunluğumun bir kaç saniye boyunca donmasına izin veren yoğun CPU işlemidir.
Diğer durumlarda, GUI'imin donmasını önlemek için başka bir NSThread'i ayıracağım. Ancak bu durumda bu mümkün değil, çünkü kullanıcı arama alanında başka bir harf girdiğinde her zaman başka bir ("arama") parçacığı ayıracağım.

NSSearchField ürünümün donmasını engellemenin başka bir yolu var mı?

BTW: hatta Developoer dokümantasyon en Seach alan :)

cevap

0

Eğer harfleri yazdıkça arama durdurmak için setSendsWholeSearchString: kullanamazsınız her zaman donar çünkü Benim tahminim, HAYIR mı?

2

GCD'yi kullanıyorum. Eşzamansız bir sıra kullanırım ve iş, geçerli arama modelinin çağrılandan değiştirilip değiştirilmediğini düzenli olarak kontrol eder ve varsa sahip olduğu kefeleri kontrol eder. Bu oldukça iyi çalışıyor gibi görünüyor.

+0

NSOperation/NSOperationQueue'dan daha düşük bir seviyeye düşmenize gerek yoktur. Ancak, ana iş parçacığındaki kullanıcı arayüzünü (arama sonuçlarıyla) güncellemeyi unutmayın. Çok sayıda kullanıcı Arabirimi güncellemeniz varsa, bu * ana iletiyi engelleyebilir ve kullanıcı arayüzünü dondurabilir. Bu nedenle, arama sonucu güncellemelerini birleştirmeye çalışın (tek bir sonuç her geldiğinde güncellenmek yerine). –

-1

Her zaman kullanıcı bir şeyler yazdığında bir NSTimer ayarlayın. Zaten ayarlanmış bir zamanlayıcı varsa, geçersiz kılın veya yeniden planlayın.

Bu sayede, yalnızca her N saniyede bir aramayı yenilemek için çağrılırsınız, ancak kullanıcı türlerini hızlı bir şekilde artırırsınız.