释放对象何时做,什么时候不用

时间:2010-07-08 15:40:59

标签: objective-c

以下是我在我的应用程序中发布的一些代码。当我尝试发布时,我收到一个程序接收信号:“EXC_BAD_ACCESS”。异常和应用程序崩溃。如果我不尝试释放它,应用程序运行正常。 我是否需要在这些对象上调用发布消息?知道会发生什么事吗?

        NSString *sA = legA.text;
        NSArray *firstLeg = [sA componentsSeparatedByString:@","]; 


[sA release]; //works ok
[firstLeg release]; //sends the bad access exception and crashes the app

5 个答案:

答案 0 :(得分:0)

它们都不需要-release d。

我建议你阅读Memory Management Rules。当且仅当当前范围是该对象的所有者时,您需要-release一个对象。当收到对象

时,您将成为所有者
  • [[Foo alloc...] init...]
  • [foo new...]
  • [foo copy...][foo mutableCopy...]
  • [foo retain]

在所有其他情况下,你永远不应该-release它。由于.text-componentsSeparatedByString:不是这些方法之一,因此无需-release sAfirstLeg

答案 1 :(得分:0)

我在目标c上不是很好,但是不应该在某个地方有[[NSArray alloc] init]的东西吗?或者componentsSeperatedBySTring会替换它吗?

答案 2 :(得分:0)

不,您只能将释放发送给您拥有所有权的对象:您从alloc / init,保留或复制获得的对象。

答案 3 :(得分:0)

运行,不要走到Memory Management Programming Guide for Cocoa的“对象所有权”部分,并阅读“拥有”对象的规则。您只释放您拥有的对象,因此在这种情况下您不想释放它们。

答案 4 :(得分:0)

到目前为止,有几个正确的答案,但是在回答“我是否拥有此”问题时,还没有人发布Cocoa Memory Management Rules应该是强制性的。

编辑:必须输入更快...