2009-08-14 96 views
0

我知道調用方法就好像它是無效的,儘管它有一個返回值(如printf),但是這又如何呢?目標c - 不使用返回值的調用對象返回方法

[NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(method) userInfo:nil repeats:NO]; 

我可以在沒有使用它返回的對象的情況下浮動嗎?這就像調用[NSObject alloc]而不將它分配給指針或任何東西。這是內存泄漏嗎?原因是我不想把它分配給一個變量(計時器),因爲如果我釋放(或autoreleaase)它會在它被觸發之前被刪除。我不想用伊娃。所以我該怎麼做?我發現了[self performSelector:@selector(myMethod)withObject:nil afterDelay:0.3];這比使用計時器好得多。

回答

2

由此調用創建的NSTimer由當前的NSRunLoop對象擁有,所以它不會被任何autorelease池漏洞自動釋放。手動釋放它是錯誤的。應的NSTimer通過發送它無效消息被刪除:

要請求移除從NSRunLoop對象的計時器的,從在其上安裝了計時器同一線程發送定時器的無效消息。此消息立即禁用計時器,因此它不再影響NSRunLoop對象。運行循環會在無效方法返回之前或之後的某個時間點刪除並釋放計時器。

所以基本上你應該有一個變量,並使用無效的代替發佈

+0

是有辦法只是讓火災時就無效?它不會重複..現在完美工作,除非有內存泄漏。泄漏並沒有說有泄漏,並且定時器對象從未分配給指針或釋放或無效。 – mk12 2009-08-14 22:55:27

+0

我明白了,我不知道計時器是否會作爲一個參數傳遞。所以你說我應該使計時器無效,而不是釋放它? – mk12 2009-08-14 22:58:45

+0

你必須是對的,因爲我試圖釋放無效後,它崩潰了......謝謝! – mk12 2009-08-14 23:02:26