2012-02-15 30 views
0

在AdWhirl SDK中 - 一個多廣告網絡集合 - 該框架的結構使得,如果您不另外從Google AdSense或從AdMob,它會在編譯和運行代碼時簡單地忽略這些代碼分支。也就是說,框架中的代碼需要AdSense SDK才能運行,但如果您不包含AdSense,則會忽略該代碼,不會出現編譯器錯誤或任何其他問題。沒有用戶需要的代碼評論或類似的東西。如果通過xcode缺少庫,則忽略代碼分支

我試圖建立一個類似的要求框架,我不能爲我的生活弄清楚他們是如何得到這個工作。顯然,默認情況下,由於缺少庫,編譯時您的代碼中會出現鏈接器錯誤。如何導出具有此功能的框架(當前爲.a文件)?

回答

0

當你做這樣的事情:

[[ClassName alloc] init] 

你實際上做的是發送alloc消息給ClassName元類,然後init到元類試圖返回的ClassName實例(或無 - 如果元類由於缺乏資源而返回nil)。

另外,Objective-C運行時是反射式的。除此之外,這意味着你可以查詢它從類的字符串名稱中找到元類。例如。

Class metaclass = NSClassFromString(@"ClassName"); 

如果該類不存在,則返回指定的元類或nil。把它們一起:如果這樣的類是已知的應用程序和適當的資源可用

id instance = [[NSClassFromString(@"ClassName") alloc] init]; 

會給你的類的實例。在可選鏈接庫的情況下,這是一種嘗試獲取類的實例的方法,但如果包含該類的庫未鏈接,則會安全地失敗。