2010-08-05 48 views
1

当我点击Xcode中的Build菜单中的“构建和分析”按钮时,我偶然发现了一个问题。分析表明我发布了一个我希望稍后返回的变量。代码如下如下:如何释放即将返回的变量?

- (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并不会造成任何问题退货吗?

回答

6

这正是autorelease的目的。该方法应该autorelease它。

如果你不清楚这类事情,我建议你阅读memory management guide。这很短,解释所有这些东西非常好。一旦你理解了这个指南,你就不会再想知道了。

1

你看过autorelease

+0

我想到了。我只是不确定在这种情况下它是否运行良好。请让我知道如果我错了,因为我是一个非常新手在objective-c。 – 2010-08-05 00:44:18

+2

@Winston Chen:这正是'autorelease'的作用。 – dreamlax 2010-08-05 01:05:57

-1

根据你在这里发布的内容,不,你不能发布它,然后返回它。警告,如果你在其他代码中设置对象上的任何其他保留。在使用nslog语句返回之前,您可以轻松地检查它。 NSLog(@“retainCount:%d”,[annView retainCount]);

+1

检查保留计数不是一个好主意。它不会给你任何准确的照片。 – Chuck 2010-08-05 01:07:08

1

有用Lynda.com视频说明自动释放池可以在这里找到:

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

谢谢。这非常有帮助。 – 2010-08-06 00:29:10

1

的自动释放池是供您使用完美的东西。当您返回变量时,请执行以下操作:

return [myVariable autorelease]; 

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