Apple的CurrentAddress示例中的MKReverseGeocoder自动释放/释放问题

时间:2011-04-29 19:45:04

标签: ios autorelease mkreversegeocoder

我正在查看直接从Apple网站上CurrentAddress sample的MapViewController.m文件中提取的代码:

- (void)dealloc
{
    [reverseGeocoder release];
    [mapView release];
    [getAddressButton release];

    [super dealloc];
}

- (IBAction)reverseGeocodeCurrentLocation
{
    self.reverseGeocoder =
        [[[MKReverseGeocoder alloc] initWithCoordinate:mapView.userLocation.location.coordinate] autorelease];
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
}

我想知道在分配对象时自动释放的功能是什么。 (reverseGeocoder是使用retain属性设置的MapViewController类中的一个ivar。)我的应用程序中有类似的代码,它似乎可以工作。

1 个答案:

答案 0 :(得分:2)

设置reverseGeocoder属性会增加保留计数(+1),但由于您使用alloc + init(+1)创建对象,因此需要{{} 1}}(-1)这样你就不会得到2个保留计数。

无论哪种方式都有效,唯一的区别是当你 autorelease时,你会泄漏。

  

reverseGeocoder是一个ivar

确实如此,但请注意,当您使用autorelease表单时,您不会直接访问ivar - 相反,您正在调用相关的self.reverseGeocoder函数,即由您自己编写或由编译器编写@synthesized。

请参阅:http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html

和: What equivalent code is synthesized for a declared property?