2010-08-11 67 views
1

是否有可能以靜態庫的方式將對象/類添加到靜態庫中,以便在庫弱鏈接時排除它們?我試圖給我的obj c類添加屬性,將它們標記爲「weak_import」,但編譯器說它是未定義的。創建一個可以弱鏈接的靜態庫

回答

4

是的,這是可能的。不幸的是,雖然運行時和鏈接器支持它,但編譯器不支持,這意味着您需要爲頭文件中的類聲明程序集存根。特別是,如果你想使MyClass的弱,你會在MyClass.h做到這一點:

asm(".weak_reference _OBJC_CLASS_$_MyClass"); 
asm(".weak_reference _OBJC_METACLASS_$_MyClass"); 

@interface MyClass 

@end 

這將只在iOS 3.1和更高版本。欲瞭解更多詳情,請閱讀this博客文章。

+0

謝謝,有道理,有點令人困惑,編譯器不支持這一點。 – 2010-08-17 15:09:50

+0

是的,這是一個新功能,需要在舊操作系統版本中提供支持纔有用,因此儘管工具支持不完整,但他們優先儘快獲得運行時支持。我預計編譯器和框架頭將全部由Mac OS X和iOS的下一個主要版本進行更新。 – 2010-08-17 22:31:25