2012-02-13 15 views
19

Temel olarak, bir anahtar olayı aldığında tekrarlanması gereken ve kullanıcı anahtarı serbest bıraktığında geçersiz kılan bu zamanlayıcıya sahibim. Ancak, NSRunLoop'taki addTimer:forMode:'u arayarak bile zamanlayıcıyı "doğrulayamıyorum". Bunun neden olduğunu ve bunu nasıl düzeltebileceğimi bilen var mı? Teşekkürler.NSTimer'i geçersiz kıldıktan sonra "nasıl doğrulanır"?

cevap

36

Geçersiz kılınmış zamanlayıcı kullanamazsınız. Elma Dokümanlar itibaren

:

bir çalışma döngüsü planlanan sonra, belirtilen aralıklarla zamanlayıcı yangınları o geçersiz kadar. Tekrarlamayan bir zamanlayıcı, 'un kendisini patladıktan hemen sonra geçersiz kılar. Ancak, yinelenen bir zamanlayıcı için, , invalidate yöntemini çağırarak zamanlayıcı nesnesini geçersiz kılmanız gerekir. Bu yöntem çağrıldığında, zamanlayıcının geçerli çalışma döngüsünden kaldırılması istenir; Sonuç olarak, zamanlayıcının yüklendiği aynı iş parçacığı için her zaman geçerli yöntemini çağırmalısınız. Zamanlayıcı geçersiz kılındığında, artık çalışma döngüsünü etkilemeyecek şekilde devre dışı bırakır. Daha sonra, çalışma döngüsü zamanlayıcısını kaldırır ve serbest bırakır, ya geçersiz kılma yönteminin hemen öncesinde ya da bazı sonraki noktasında. Geçersiz kılındığında, zamanlayıcı nesneleri yeniden kullanılamaz.

+0

İlginç bir şekilde NSRunLoop addTimer var, ancak zamanlayıcı onu geçersiz kılmadan ateşlemeyi durdurmada yararlı olabilecek bir removeTimer yok. Zamanlayıcı yaratmanın limanın yaratılmasından daha ucuz olması, böylelikle elmanın bu api'yi eklememesi zahmetine girmemesi gerekir. –

13

NSTimer'i geçersiz kıldığınızda, bir daha kullanmamanız gerekir. Bunun yerine, yeni bir zamanlayıcı örneği oluşturun ve bu örneği NSRunLoop'un addTimer yöntemine eklemek için kullanın. Şahsen NSTimer'in planlıTimerWithTimeInterval öğesini çağırmayı tercih ediyorum çünkü her şey tek bir çekimde yapıyor. NSTimer docs itibaren

:

bu yöntem geçerli çalıştırmak döngüden zamanlayıcı kaldırılmasını isteyen çağrılması

; Sonuç olarak, zamanlayıcının yüklendiği aynı iş parçacığından her zaman geçersiz kılma yöntemini çağırmalısınız. geçersiz kılma zamanlayıcı, hemen döngüsünü etkilemeyecek şekilde devre dışı bırakır. Daha sonra çalışma döngüsü, zaman aşımını kaldırır ve serbest bırakır, invalidate yöntemi geri dönmeden önce veya daha sonraki bir noktadan önce sadece . Bir kez geçersiz kılınmış, zamanlayıcı nesneler yeniden kullanılamaz.

+0

Doğru, Bilmiyordum ... Teşekkürler! – TheAmateurProgrammer

İlgili konular