如果我只在一个方法的范围内使用它,我是否需要保留一个对象?

时间:2010-03-23 02:07:42

标签: objective-c

我得到了奇怪的EXC_BAD_ACCESS错误。我认为如果在退出方法后我不需要它们,我不需要保留对象,但我想仔细检查一下。在下面,我需要保留“tData”吗?

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

3 个答案:

答案 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参数传递。

相关问题