1
我使用的核心運動的推動處理程序加速更新:崩潰與塊和核心運動
CMAccelerometerHandler accelerometerHandler =^(CMAccelerometerData *accelerometerData, NSError *error) {
// handle update
};
[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:[[accelerometerHandler copy] autorelease]];
此代碼崩潰。如果我根本不復制塊,我會在暫停/恢復時間間歇性地崩潰。如果我刪除autorelease
它工作正常,但我認爲這會產生泄漏。
我也嘗試將塊分配給伊娃,並在[motionManager stopAccelerometerUpdates]
後發佈。崩潰以及。
怎麼回事?我一直以爲我必須平衡任何copy
/retain
與release
/autorelease
?
參見:Copying blocks (ie: copying them to instance variables) in Objective-C
好吧,愚蠢的我。當我嘗試了我描述的伊娃方法時,我將塊字面賦值給了伊娃,然後調用'[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:[[accelerometerHandler copy]]''。所以當我釋放伊娃時,我實際上試圖釋放堆棧塊而不是堆塊。當然哪個崩潰。 – 2010-11-12 18:36:56
這會導致問題:)塊管理有時候會有點奇怪,但是你得到它的竅門 – 2010-11-12 18:38:59