我正在查看直接从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。)我的应用程序中有类似的代码,它似乎可以工作。
答案 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?