【问题标题】:MKReverseGeocoder autorelease/release question in Apple's CurrentAddress sampleApple 的 CurrentAddress 示例中的 MKReverseGeocoder 自动发布/发布问题
【发布时间】:2011-04-29 19:45:03
【问题描述】:

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

【问题讨论】:

    标签: ios autorelease mkreversegeocoder


    【解决方案1】:

    设置 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

    并且: What equivalent code is synthesized for a declared property?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多