ios中c頭文件的arc混亂 – iPhone手機開發技術文章 iPhone軟體開發教學課程

 

問題有些詭異,讓我細細描述。

我建立瞭一個c的頭文件FALog.hL來做作為我的日志工具類(非arc),代替NSLog,這個c文件包含瞭部分的objc代碼。

 

我的整個工程是非arc的,隻有兩個文件A、B是arc的,我在build parses中將A、B的compile flags 設為-fobjc-arc,使之為arc編譯

 

在我添加A、B文件之前,我的FALog是可以正常編譯的,添加A、B之後,FALog中對我的release和autorelease老是提示“arc下面不可以release”,如下:

 

[cpp] 

'autorelease' is unavailable: not available in automatic reference counting mode  

 

問題是我的FALog真的不是arc,瘋掉瞭。

最終解決無果,我決定看看我的falog是不是真的arc,使用宏:

 

[cpp] 

#if __has_feature(objc_arc)  

// ARC is On  

#else  

// ARC is Off  

#endif  

事實證明我的falog就是非arc的,無語,於是我在我的release代碼前後加上宏判斷,如下

[html] 

#if !( __has_feature(objc_arc))  

    NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init]autorelease];  

#endif  

編譯成功瞭,我很無語,本來就不是arc,現在還非要讓我判斷一下是不是arc才能編譯成功,不知道xcode怎麼回事。

困擾我n天瞭,希望對你有幫助。

 

另外科普一下:

 

ios中如果arc和非arc文件混編,可以在build parses中指定compile flags,如果arc文件設為"-fobjc-arc",非arc文件設為"-fno-objc-arc"

 

發佈留言