如何释放即将返回的变量?

时间:2010-08-05 00:40:18

标签: iphone objective-c

当我点击Xcode中Build菜单上的“build and analyze”按钮时,我偶然发现了一个问题。分析建议我发布一个我希望以后返回的变量。代码如下:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{

     //I do some other thing here

     MKPinAnnotationView *annView=
        [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"addressLocation"];

     //I do some other thing here

     return annView;
}

我可以发布annView并返回它而不会造成任何问题吗?

5 个答案:

答案 0 :(得分:6)

这正是自动释放的目的。该方法应该自动释放它。

如果您不清楚此类事情,我建议您阅读memory management guide。它非常简短,很好地解释了所有这些。一旦你理解了这个指南,你就再也不用怀疑了。

答案 1 :(得分:1)

你看过autorelease吗?

答案 2 :(得分:1)

解释自动释放池的有用Lynda.com视频可在此处获取:

http://creativemac.digitalmedianet.com/articles/viewarticle.jsp?id=1003156

答案 3 :(得分:1)

自动释放池是您使用的最佳选择。返回变量时,请执行以下操作:

return [myVariable autorelease];

很多苹果的方法都使用它。 Apple的类上的大多数静态构造函数(如[NSString stringWithFormat:]]返回自动释放的变量。

答案 4 :(得分:-1)

根据您在此处发布的内容,不,您无法释放它然后将其退回。需要注意的是,如果要在其他代码中设置对象上的任何其他保留。在使用nslog语句返回之前,您可以轻松地检查这一点。

NSLog(@“retainCount:%d”,[annView retainCount]);