没有事先保留的释放危险吗?

Ban*_*ong 1 iphone objective-c

我有一些代码,我认为有额外的发布声明.

  1. 代码不正确吗?
  2. 最终结果是什么?

我还不太了解内存管理 - 即使在阅读了大量文章和stackoverflow答案之后.谢谢你把我拉直了.

更新:附加的代码段工作正常,但其他代码有过度释放问题

NSMutableArray *points = [NSMutableArray new];
for (Segment *s in currentWorkout.segments) {
 [points addObjectsFromArray:[s.track locationPoints]];
}
[routeMap update:points];
[points release];
Run Code Online (Sandbox Code Playgroud)

Pau*_*nch 6

您的代码是正确的,但不建议.new充当隐含的alloc,它创建保留计数为1的对象.

我想我最近一次使用新款是在1992年; 这没有错,但是alloc/init被认为是更好的做法,因为它更清楚你在做什么.请阅读Apple的内存管理指南,它是对情况的全面总结.


Chu*_*uck 5

没有消息可以安全地发送到解除分配的对象.一旦一个对象被释放了足够的次数,它就会被解除分配.发送到该对象的任何其他消息将转到不再存在的对象.准确的结果不是完全可预测的,但通常以崩溃结束.如果你不那么幸运,它可能以更奇怪的方式结束 - 例如,你理论上可以结束对象A早期解除分配,对象B分配在相同的内存位置,然后对象B接收意味着对象A的消息对象B确实理解但当时不应该接收.

基本上,遵守规则.从所有权的角度来考虑它.如果您声明了所有权,则需要释放该所有权.如果您不拥有该对象,则不得释放它.