問題有些詭異,讓我細細描述。
我建立瞭一個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"