【问题标题】:autorelease unavailable in automatic reference counting mode [duplicate]在自动引用计数模式下自动释放不可用[重复]
【发布时间】:2012-12-27 00:33:03
【问题描述】:

可能重复:
Im getting this error ‘autorelease’ is unavailable: not available in automatic reference counting mode

我正在通过 2011 年出版的名为 Objective-C 基础知识的书学习 Objective-C。它正在构建一个简单的应用程序来介绍 iOS 概念并教授 Objective-C 语言。自本书出版以来,平台或语言似乎发生了一些变化。当我尝试从书中构建代码时(关键段落摘录如下),我收​​到了这个错误:

autorelease is unavailable: not available in automatic reference counting mode
ARC forbids explicit message send of 'autorelease'

错误消息出现在代码中实际使用自动释放的几行上方。

我只有大约 1 小时的 Objective-C 和 iOS 经验,所以我不知道如何解决这个问题,所以我可以继续阅读本书。任何帮助,将不胜感激。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil){                        #### error message here
        cell = [[[UITableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                 reuseIdentifier:CellIdentifier]autorelease];  ### autorelease used here
    }
    cell.textLabel.text = [NSString
                           stringWithFormat:@"Rental Property %d", indexPath.row];
    NSLog(@"Rental Property %d", indexPath.row);
    return cell; 
}

如果我不能解决这些类型的小问题,那么我将无法跟随这本书。如果我可以使用某种版本系统(例如 rvm for Ruby)来避免此类问题,请告诉我。

【问题讨论】:

标签: objective-c ios memory-management


【解决方案1】:

如果你只有一个小时,我建议重新启动。

在 Xcode 中构建 Objective-c 项目有一个称为自动引用计数的功能。你的书没有使用它。

重新启动时,请密切注意通过向导创建项目。您需要确保

使用自动引用计数

没有被选中。

【讨论】:

  • 我宁愿买一本新书。放弃 ARC 似乎是个糟糕的选择。
  • 我不使用弧。我在ARC之前学习了objective-c。我认为最好在使用 ARC 之前了解内存管理。
  • 谢谢,这是可以让我跟随本书的答案。我会按照说明重新启动
  • “我认为最好在使用 ARC 之前了解内存管理。”为此+1。您也需要这种理解才能正确使用 ARC。 (但您仍想使用 ARC)。
  • 我会坚持看这本书。在没有 ARC 的情况下学习 Objective-C 是一个很好的方法。保留/释放内存管理不难学习,但正确地做很重要,而且一开始比以后更容易学习。一旦掌握了保留/释放的窍门,就很容易拿起 ARC。 ARC 并没有消除内存管理,它毕竟只是隐藏了它——如果你对下面发生的事情没有很好的感觉,你可能会以各种方式陷入困境。并且发现大量现有代码难以在您自己的项目中遵循、编译、调整和使用。
【解决方案2】:

阅读适用于 iOS 的Advanced Memory Management Guide。这是一本很好的读物,即使您继续使用 ARC,也很容易理解。还有一些场景需要你去理解。

自动释放是手动内存管理的一部分。

后来在 iOS 5 中,添加了 ARC(自动引用计数)以避免手动管理内存。

这是一个比较 manual and ARC 的文章。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2018-11-07
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多