Objective c 释放没有指针的对象?

Objective c 释放没有指针的对象?,objective-c,ios,memory-management,Objective C,Ios,Memory Management,我刚刚开始为iPhone开发,我正试图了解内存管理。我制作了一个小程序,在地图上显示地图和注释。对于注释,我创建了一个实现MKAnnotation协议的简单类 要创建和添加注释,我写了以下内容: [self.myMapView addAnnotation:[[MyAnnotation alloc] init]]; 在我试图释放这个物体之前,它工作得很好。没有什么要发布的。这就是我在C#中应该做的,我想如果没有垃圾收集,它是不会工作的 那么这是唯一的方法吗 MyAnnotation *myAnn

我刚刚开始为iPhone开发,我正试图了解内存管理。我制作了一个小程序,在地图上显示地图和注释。对于注释,我创建了一个实现MKAnnotation协议的简单类

要创建和添加注释,我写了以下内容:

[self.myMapView addAnnotation:[[MyAnnotation alloc] init]];
在我试图释放这个物体之前,它工作得很好。没有什么要发布的。这就是我在C#中应该做的,我想如果没有垃圾收集,它是不会工作的

那么这是唯一的方法吗

MyAnnotation *myAnnotation = [[MyAnnotation alloc] init];

[self.myMapView addAnnotation: myAnnotation];

[myAnnotation release];

是的,这是处理这种情况的公认方法。你也可以在codelark的回答中调用
autorelease
,但在iPhone有限的内存环境中,自动删除有时会导致问题,因为对象在最终释放之前会停留一段时间。尽可能避免自动释放是一种很好的做法。

各位,谢谢你们的回答

在我看来,这段代码与我最初想到的解决方案最为相似

[self.myMapView addAnnotation:[[[MyAnnotation alloc] init] autorelease]];

“尽可能避免自动释放是一个很好的做法”——我不同意。只有当您同时分配数百或数千个对象时,才能避免这种情况。在本例中,这是正确的习惯用法。+1表示正确的答案(示例#2通常是这样做的),但避免无原因自动释放只是cargo cult编程。在这种情况下,该对象已被一个对象保留,该对象将在当前事件循环之后保留在内存中,因此避免自动释放将绝对不会保存任何内存。我们注意并赞赏这一批评。我会记得在将来更好地限定我关于这个问题的陈述。避免自动释放绝对不是常见的,也不是建议的,NSAutoreleasePool是定期分配和释放的,并且在向其对象发送释放时非常快。。。不要避免自动释放如果你不知道为什么,自动释放和释放有自己的用途,知道它们并正确使用它们,你应该没有任何问题。。。还记得学习内存管理规则!对不起,我迟到了。我仍在努力解决这个问题,而你的答案正是我想要的答案。我又发了一次这个问题,这次重点是内存泄漏,得到了和你一样的答案。
[self.myMapView addAnnotation:[[[MyAnnotation alloc] init] autorelease]];