2011-10-14 52 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' –