正如我們所知,在X代碼中編程objective-c用於表示處理對象的手動引用計數。之後,引入了垃圾收集功能,現在已被自動引用計數(ARC)取代。垃圾收集應用程序加載ARC二進制
在過去,我有一個用GC開發的應用程序,可以使用函數調用dlopen加載庫。這要求加載庫與主機應用程序的庫匹配,並使用GC。如果庫是用ARC構建的,dlopen會失敗。當然,這種不相容性是可以預料的。
系統首選項應用程序就是一個很好的例子。它使用垃圾收集: -
otool -oV /Applications/System\ Preferences.app/Contents/MacOS/System\ Preferences | tail -3
Contents of (__DATA,__objc_imageinfo) section
version 0
flags 0x2 OBJC_IMAGE_SUPPORTS_GC
直到10.7 so did the preference panes which it loads。但是,在10.8的系統預置應用程序仍然使用GC,但其中一些IT負載窗格別: -
otool -oV /System/Library/PreferencePanes/Network.prefPane/Contents/MacOS/Network | tail -3
Contents of (__DATA,__objc_imageinfo) section
version 0
flags 0x0
那麼,這是怎麼回事呢? System Preferences應用程序的垃圾收集機制如何處理ARC編譯的窗格?他們是否泄露了內存,或者是否存在某種轉換?
正是我在找的東西。感謝您的解釋。 – TheDarkKnight