2009-10-01 73 views
0

我有一個簡單的應用程序,倒數到午夜,然後播放一遍又一遍的嘟嘟聲,並閃爍顯示時間的標籤。因此標籤閃爍使用NSTimer,而蜂鳴聲則在自己的Thread上,因此純C函數(用於系統聲音ID完成回調)可以使用[NSThread sleepForTimeInterval:...];在等待一段時間之後播放警報嗶聲。所以我在執行期間收到兩條錯誤消息,說沒有autorelease池,它只會泄漏。因爲在我調用新線程的方法中,有兩個@「字符串」用於創建系統聲音ID(文件名和擴展名)。有沒有辦法我不能使用自動釋放池,因爲這些是有史以來嘗試使用它的唯一兩件事。謝謝。iPhone dev多線程,NSAutoreleasePool

或者我應該使用兩個NSTimers而不是另一個線程..?

Ben Gottlieb的回答是對的,但是我決定使用另一個NSTimer,因爲我忘記了它是如何在你花費一些時間之前將它作爲代碼的實際執行時間而沒有真正同步的。它使事物對稱;)。

回答

2

在你的線程方法只需創建一個自動釋放池:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

...thread body...

[pool release];

+0

那是什麼和'[池排水]之間的區別;'? – mk12 2009-10-01 01:46:43

+0

'-drain'方法是較新的首選方法,在垃圾收集方面也很好。我相信該方法在10.4+上可用。 – 2009-10-01 01:54:27

+0

我在iphone上,而不是在OS X上。 – mk12 2009-10-01 01:58:10