释放没有指针的对象?

时间:2010-12-29 18:58:50

标签: objective-c ios memory-management

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

要创建和添加我写的注释:

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

在我尝试释放对象之前,它工作正常。什么都没发布。这就是我在C#中所做的,我想如果没有垃圾收集它就行不通了?

这是唯一的方法吗?

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

[self.myMapView addAnnotation: myAnnotation];

[myAnnotation release];

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

每个人,谢谢你的答案。

在我看来,这段代码最像我最初想到的解决方案。

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