当我点击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并返回它而不会造成任何问题吗?
答案 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]);