2010-11-21 17 views
2

CPU yükü açısından basitçeiPhone - ipler

[self doStuff:myObject]; 

bu

[self performSelectorOnMainThread:@selector(doStuff:) 
         withObject:myObject 
        waitUntilDone:YES]; 

kullanarak yerine arasındaki fark nedir? Ya da başka avantajlar var mı?

Teşekkürler.

cevap

2
[self performSelectorOnMainThread:@selector(doStuff:) 
        withObject:myObject 
       waitUntilDone:YES]; 

Bu selektör ana çalışma döngüsü ekleyerek ana iş parçacığı üzerinde gerçekleştirilir emin olur. waitUntilDone:YES'u ayarladığınızda, ana iş parçacığının seçiciyi gerçekleştirmesi gerektiğinde, geçerli iş parçacığınızı boşta bırakırsınız. Tek bir iş parçacığıyla çevrilmiş bir ortam içinde, bu işlem, sizden sonra, çok iş parçacıklı bir ortamda, runloopun koşmasına izin verecektir, ana runloop, bir sonraki adımı gerçekleştirdiğinde seçiciyi gerçekleştirecektir.

[self doStuff:myObject];, sizin örnekte ikinci mesajı seçici hemen

+0

Teşekkürler! Bundan şüpheleniyordum! – SpaceDog

+0

Afedersiniz, ama çok doğru değildi. Bunu ana iş parçacığından çağırırsanız, yöntem "waitUntilDone: YES" parametresi olduğu için hemen gerçekleştirilir. İleti, çalışma döngüsünü atlayacak ve bu çalışma döngüsünün bu koşulda hiçbir zaman çalışmadığından bahsetmek önemlidir; çünkü ana çalışma döngüsü, boşaltmayı otomatikleştiren havuzu boşaltmak ve sıraya alınmış iletileri yürütmek de dahil olmak üzere birçok işlemi gerçekleştirir; kod – tia

+0

Hey, bilgi için teşekkürler. Bunu bilmiyordum! – JustSid

1

İlki, yönteminizin ana iş parçacığında çağrıldığından emin olun. Multithreading yapmıyorsanız, aynı sonucu vermelidir.

1

gerçekleştirirken Sen işlevini denilen sonra selektör gibi küçük havai doğru gerçekleştirilmez iki durumda hiçbirinde ancak daha sonraki bir noktada var Hemen gönderilecek, ilki ana iş parçacığının çalışma döngüsüne eklenir, böylece hemen çalışmayacaktır.