AFNetworking (AFXMLRequestOperation) Main Thread’i Engelliyor – BT Hayat
admin 30 Temmuz 2013	 iOS / Iphone / ipucu / Kendime Not
İlgili viewController classıma xml parsing delegate metodlarını yazabilmek için <NSXMLParserDelegate> ibaresini ekledim ve gereken metodları yazdım. İşlem gayet düzgün çalıştı fakat veriler parse edildikten neredeyse 2-3 saniye sonra table güncelleniyordu.Halbuki [self.tableView reloadData] fonksiyonunu parsing işleminin bitiminde çalışan
Debug yapınca reloadData’nın sırası geldiği halde çalışmadığını, AFNetworking’in parse işleminden sonra başka rutinlerinin icra edildiğini, 1-2 saniye sonra reloadData’ya sıra geldiğini farkettim.
Google’da araştırınca sorunun kaynağını buldum. AFNetworking operasyonu sürerken uygulamamızın ana thread’i (bellekte yer teşkil eden ana prosess) bloke ediyormuş. Sorunun ne olduğunu düzgün ifade edince çözümü bulmak da kolaylaştı. Tabi gerçek çözüme ulaşana kadar 8-10 saçma sapan deney yapmadım değil. Asıl mesele sorunu tam anlamakmış. O zaman çözüm de kolayca bulundu.
Yukarıda bahsettiğim fonksiyonda (parserDidEndDocument) yer verdiğim [self.tableView reloadData] rutinini şu şekilde yazmak gerekiyormuş;
Bu ifadeyi ilk kez kullandım. Demek ki iç thread’lerden birindeysek ve ana thread’de bir iş yaptırmak istiyorsak performSelectorOnMainThread diye bir fonksiyon imdadımıza yetişiyormuş. Öğrenmiş olduk.
afnetworking / afxmlrequest / AFXMLRequestOperation / performSelectorOnMainThread / rss / thread / xml
Previous PostAFNetwork Expected content type hatası
Next PostPHP ile MacOSx üzerinde mail gönderemiyorsanız