objective-c - 在启用 ARC 的情况下更新属性

标签 objective-c ios xcode memory-management

我正在使用最新的 SDK 和 XCode 4.2 开发 iOS 4 应用程序。

我已在我的项目中启用了 ARC,并且我正在尝试将以前的项目迁移到使用此功能 (ARC) 的新项目。

问题来自于 setter 实现。这是我的类(class)(旧版本):

@interface RouteView : MKAnnotationView
{
    /**
     */
    MKMapView* _mapView;

    ...
}

@property (nonatomic, retain) MKMapView* mapView;

及其实现:

@implementation RouteView

@synthesize mapView = _mapView;

-(void) setMapView:(MKMapView*) mapView
{
    [_mapView release];
    _mapView = [mapView retain];

    [self regionChanged];
}

我在 setMapView: 方法的第一行中收到两个编译器错误。

如何在启用 ARC 的情况下执行自定义 setter 方法?

最佳答案

使用 ARC,您不再需要释放/保留对象,因为它具有自动引用计数功能,可以在编译时放入保留和释放调用。

作为合并旧程序时的快速修复,您可以注释掉具有以下内容的任何行:

  • [myObject 保留]
  • [myObject 发布]

只需确保在删除该部分时不会删除任何功能。在您的应用程序中,您需要将 [mapView keep] 替换为 mapView,因为您仍然需要设置对象,只是不保留它。

因此您的 setMapView 方法将如下所示:

-(void) setMapView:(MKMapView*) mapView
{
    //[_mapView release];          //Don't need this line anymore.
    //_mapView = [mapView retain]; //Don't need this line either.

    _mapView = mapView //You still want to set the mapView, just not retain it.

    [self regionChanged];
}

关于objective-c - 在启用 ARC 的情况下更新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8653085/

相关文章:

ios - 更改 Storyboard中拖动的导航栏的标题

ios - 通知不会出现在应用程序中

objective-c - Windows 中的 Objective C "cannot find -lgnustep-base"

ios - CGImageCreateWithImageInRect 持有图像数据 - 泄漏?

ios - Swift:如何在中断时停止调用 scheduleBuffer 完成处理程序?

ios - 使用未声明的类型 UIViewController

ios - xcode Interface Builder 背景颜色偏好

ios - Xcode 6 "Terminating app due to uncaught exception"

objective-c - CocoaLumberjack FileLogger 记录到多个文件

iphone - 解锁编程旋转锁后强制 iOS ViewController 旋转到设备方向