1

我正在查看直接从Apple 网站上提供的CurrentAddress 示例中的 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 是 MapViewController 类中的一个 ivar,设置有 retain 属性。)我的应用程序中有类似的代码,它似乎可以工作。

4

1 回答 1

2

设置您的reverseGeocoder属性会增加保留计数 (+1),但由于您使用alloc+ init(+1) 创建对象,因此您需要autorelease(-1) 以便最终不会得到 2 个保留计数。

无论哪种方式,它都可以工作,唯一的区别是当你不这样做时 autorelease你会泄漏。

reverseGeocoder 是一个 ivar

确实如此,但请注意,当您使用self.reverseGeocoder表单时,您并没有直接访问 ivar,而是调用了相关setReverseGeocoder:函数,该函数要么由您自己编写,要么由编译器 @synthesized。

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

并且: 为声明的属性综合了哪些等效代码?

于 2011-04-29T19:52:04.963 回答