2012-01-12 33 views
1

首先,我應該說我使用ARC,所以保留不是一個選項。該對象的類是NSViewController類型的,有兩個NSTimers以及幾個文本字段和按鈕。奇怪的是,當兩個定時器失效時,看起來對象正在被釋放。這是一個問題,因爲有時我只是想暫停或重新啓動它們,這意味着我必須使它們無效,但是一旦我這樣做,引用就會丟失,任何向對象發送的消息都會引發EXC BAD ACCESS。可可:對象獲得自動釋放時,它不應該

我不是很熟悉,內存管理或ARC偏偏是基準失去了對計時器只依賴?我的意思是,僅僅因爲它們失效並不意味着我不再需要這個對象。

我試圖聲明計時器作爲實例變量和屬性,但沒有任何改變。

我真正需要的是參考不被保留,即使兩個定時器無效。我究竟做錯了什麼?

回答

2

NSTimer保留其目標,所以如果它是當定時器無效它將被解除分配對象的唯一引用。你必須擁有你的對象的所有權,最好是通過聲明強大的財產。

編輯:改變 「委託」 給 「目標」;

是的,你必須申報財產和(可能)一個實例變量它。 release notes舉了一個很好的例子,還有其他一些好的介紹。如果您的所有者類已經被釋放,請確保您使計時器無效,否則您的視圖控制器將停留。

+0

你的意思是「目標」,而不是「委託」。 – 2012-01-12 19:49:49

+0

聽起來很有希望。所以在我的另一個類(創建這個對象的那個類)中應該在它的頭文件中聲明這個對象?我應該使用哪些任務來使其成爲強大的財產? – Elbimio 2012-01-12 19:50:45

+0

@Francis McGrew我還有一個問題。我宣佈這個班是一個(非原子的,強大的)財產。問題是我需要該類的幾個實例,當我做第二個時,重新啓動前一個NSTimer我做了一個不良的訪問。我想象第二個是覆蓋第一個或某個東西,但他們應該是獨立的。 – Elbimio 2012-01-13 20:49:47