2

可能重复:
我收到此错误“自动释放”不可用:在自动引用计数模式下不可用

我正在通过 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)来避免此类问题,请告诉我。

4

2 回答 2

7

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

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

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

使用自动引用计数

未选中。

于 2012-12-27T00:37:51.300 回答
2

阅读 iOS 的高级内存管理指南。这是一本很好的读物,即使您继续使用 ARC,也很容易理解。仍然存在需要了解它的场景。

autorelease 是手动内存管理的一部分。

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

这是比较manual 和 ARC的文章。

于 2012-12-27T00:36:13.520 回答