2011-10-14 27 views
0

ios5中的autorelease方案有哪些选择?此前为表视图下面的方法将工作:ios5上的autorelease替代方案

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSUInteger row = [indexPath row]; 

    static NSString *TableIdentifier = @"TableIndentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:TableIdentifier]autorelease]; 
    } 

    cell.textLabel.text = [arrAccounts objectAtIndex:row]; 
    return cell; 
} 

如何过,现在我得到一个消息“ARC者禁用”和“自动释放不可用” ...什么是周围的工作吗?

+1

纠正我,如果我错了,但我认为ARC是一个编译器功能,而不是iOS 5功能。所以你应该可以在以前的iOS版本上运行ARC编译的应用程序。如果您不想使用ARC,则不需要使用ARC,可以关闭它并继续使用保留版本。 – Stefan

+0

@Stefan并不完全如此。操作系统也必须支持ARC。也就是说,iOS4之前没有任何ARC支持。 – Till

回答

11

只需卸下自动释放,ARC做的工作对你

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:TableIdentifier]; 

这该死的魔法

3

删除自动释放呼叫。 AFAIK编译器足够聪明,可以认识到它应该被自动释放,并为你合成合适的调用。

2

如果您不想对ARC进行所需的更改为当前文件,则可以使用该文件的新-fno-objc-arc编译器标志禁用特定文件的ARC。使用新的-fobjc-arc编译器标志启用ARC。如果您对某些文件使用手动引用计数更方便,则可以选择在每个文件基础上使用ARC。更多信息: http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

+0

这是一个非常棒的答案 - 特别是在处理第三方代码的地方。请注意,URL已更新为http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html,具体而言,您需要做的是打开目标>构建阶段选项卡>展开'编译源代码'>对于任何你仍然想使用autorelease的文件添加'-fno-objc-arc' –