我正在使用手動引用計數和Xcode 4.5。保留帶有[UIA加速度計共享加速度計]的指針的智能手錶?
我宣佈伊娃:
UIAccelerometer *accelerometer;
加速度計不是一個性質。我在一個方法有此代碼:
accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
在第二個方法我:
accelerometer.delegate = nil;
,並在以後運行的另一種方法,我有:
accelerometer.delegate = self;
有了這個偶爾設置我(很少和看似隨機)得到以下中止:
「NSInvalidArgumentException」的,理由是:「 - [NSPathStore2 setDelegate:]: 無法識別的選擇發送到實例XXX
經過大量的挫折尋找這個中止我試圖把在加速度計保留時,它是第一個原因用過之後就沒有中止了。但我擔心保留並沒有解決真正的問題。思考這個「解決方案」的原因是中止消息抱怨對setDelegate的調用,並且在似乎相關的代碼段中,我設置的唯一代表是加速度計。但我不明白爲什麼這應該解決它,我擔心保留只是以一種恰好隱藏問題的方式移動代碼。
就我的理解是,
accelerometer = [UIAccelerometer sharedAccelerometer];
創建一個單一實例,將具有相同的地址,它是在實例的持續時間,並且該地址被分配給了加速度計,這也存在在實例期間。如果是這種情況,爲什麼保留改變什麼?
共享加速度計單例可以在它所處的實例取消分配之前解除分配嗎?
對不起,但backtics似乎並沒有工作的鑽機今天ht。我已經編輯了這3次來改變backtics,但不能讓它看起來不錯。我所有的backtics都是分開的,但有時它們在這裏沒有換行符。 – RobertL
您是否考慮切換到ARC?手動引用計數是單調乏味且容易出錯的。 – nielsbot
是的,我有,但這不是時候。這款遊戲已經有10,000行代碼,其中大部分代碼都是不止一次寫入的,外加170個png文件,我承受着壓力要儘快把它弄出來。現在看起來很穩固,所以我不願意做出不必要的改變。如果它有很多用戶,我會將其轉換爲ARC以進行更新。 – RobertL