2010-03-23 63 views
0

我越來越奇怪的EXC_BAD_ACCESS錯誤。我認爲如果在方法退出後我不需要它們,我不需要保留對象,但是我想仔細檢查一下。在下面,我需要保留「tData」嗎?如果我只在一個方法的範圍內使用它,我是否需要保留一個對象?

-(void)myMethod:(UITouch*)touch{ 
    TouchData *tData = (TouchData *)CFDictionaryGetValue(datasByUITouch, touch); 
    [tData doSomething]; 
} 
+0

你應該沒問題。您是否在'[tData doSomething]方法調用或其他地方獲得了EXC_BAD_ACCESS錯誤? – kubi 2010-03-23 02:12:10

+0

關於[tData doSomething]。一些奇怪的事情正在發生。 – morgancodes 2010-03-23 02:15:16

+0

做些什麼事? – debu 2010-03-23 02:53:29

回答

0

我認爲根據規則,你在做什麼並不需要你保留tData對象的範圍。你不是做一個初始化ALLOC副本,而是你使用的TouchData的方法之一返回一些數據,這意味着你正在訪問TouchData的方法負責釋放物體。

0

該對象是否返回一個CoreFoundation對象?如果是這樣,從蘋果的文檔(http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-SW1

看到這一點,如果你不是一個 創建或複製功能,如 Get函數,你不擁有它的其他任何核心 基金會函數接收對象和 不能確定該物體的壽命 跨度。如果您要確保在您使用 時不會處理此類對象,則必須聲明所有權爲 (具有CFRetain功能)。你是 然後負責放棄 所有權當你完成 它。

0

對,沒必要保留在這個方法中。看起來觸摸是在這個方法被調用之前發佈的。

CFDictionary是如何創建的?如果沒有創建保留值的說明,那麼字典將不會保留觸摸。如果是這種情況,請傳遞kCFTypeDictionaryValueCallBacks(CFValueCallBacks)作爲CFDictionaryCreate(或CFDictionaryCreateMutable)的valueCallBacks參數。

+0

有趣。謝謝!我會試一試,看看它是否能解決問題。 – morgancodes 2010-03-23 15:25:45

相關問題