我得到了奇怪的EXC_BAD_ACCESS错误。我认为如果在退出方法后我不需要它们,我不需要保留对象,但我想仔细检查一下。在下面,我需要保留“tData”吗?
-(void)myMethod:(UITouch*)touch{
TouchData *tData = (TouchData *)CFDictionaryGetValue(datasByUITouch, touch);
[tData doSomething];
}
答案 0 :(得分:0)
对象是否返回CoreFoundation对象?如果是,请从Apple文档(http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-SW1)
中查看如果您从任何Core收到一个对象 除了一个基础功能 创建或复制功能 - 例如a 获得功能 - 你不拥有它 无法确定对象的生命 跨度。如果你想确保这样的话 你没有处置一个物体 正在使用它,你必须要求所有权 (使用CFRetain功能)。你是 然后负责放弃 完成后的所有权 它
答案 1 :(得分:0)
我认为根据规则,你在那里做的不要求你保留范围的tData对象。您没有执行 init , alloc , new 或 copy ,而是使用TouchData之一返回某些数据的方法,这意味着您正在访问的TouchData方法负责释放该对象。
答案 2 :(得分:0)
是的,无需保留此方法。看起来在调用此方法之前已发布触摸。
CFDictionary是如何创建的?如果没有使用保留值的指令创建,则字典将不会保留触摸。如果是这种情况,请将kCFTypeDictionaryValueCallBacks(CFValueCallBacks)作为CFDictionaryCreate(或CFDictionaryCreateMutable)的valueCallBacks参数传递。