以下是我在我的应用程序中发布的一些代码。当我尝试发布时,我收到一个程序接收信号:“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
答案 0 :(得分:0)
它们都不需要-release
d。
我建议你阅读Memory Management Rules。当且仅当当前范围是该对象的所有者时,您需要-release
一个对象。当收到对象
[[Foo alloc...] init...]
[foo new...]
[foo copy...]
或[foo mutableCopy...]
[foo retain]
在所有其他情况下,你永远不应该-release
它。由于.text
和-componentsSeparatedByString:
不是这些方法之一,因此无需-release
sA
和firstLeg
。
答案 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应该是强制性的。
编辑:必须输入更快...