我的應用程序是針對最新的iOS 4.x版SDK目前編制。一旦iOS 5.0 SDK發佈,我是否可以在我的應用程序中使用新的iOS 5.0 SDK功能,並且可以在iOS 4設備上運行它(但使用禁用了新功能的部件)?使用的是iOS 5功能,而不會破壞向後兼容性
12
A
回答
10
一般回答的問題,Objective-C運行是完全反射的,這意味着可以查詢該方法的對象支架(經由respondsToSelector:
),並通過得到的類保持運行時名稱(通過NSClassFromString
)。 iOS的二進制文件還支持弱聯動的概念,框架,這意味着如果它是可用的框架將被加載,但是,如果框架是不可用你不認爲這是一個致命的錯誤(這是默認行爲)。
這意味着,當蘋果發佈OS的新版本中,你可以編寫使用的操作系統,但功能罰款最新版本的新功能沒有他們,如果這些新功能是API的新位代碼。
蘋果有時也會提供新的SDK功能,是不是新的API,當鏘靜態分析器加入的Xcode如。由於這些功能通常不需要任何運行時支持,因此它們完全可用。 iOS 5有一點獨特,因爲蘋果對LLVM項目的承諾表明,ARC的東西中有一些新的編譯時功能依賴於某些運行時支持。所以他們將無法使用,如果他們確實在蘋果打算分發它們的工具中。
9
你可以請檢查是否某些功能是可用的或者不運行時。
例如:
Class motionManagerClass = NSClassFromString(@"CMMotionManager");
if(motionManagerClass) {
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
if([motionManager isGyroAvailable]) {
//iOS device with gyro
}else {
//right iOS but device has no gyro
}
}else{
//wrong iOS
}
相關問題
- 1. iOS 4和iOS 5向後兼容性
- 2. 是否可以添加新的ProtoInclude屬性不會破壞向後兼容性
- 3. 爲什麼java.sql.Statement會破壞向後兼容性?
- 4. ios 5和ios6兼容性功能-xcode
- 5. Silverlight 5向後兼容性
- 6. Android中的功能向後兼容性
- 7. 破碎的向後兼容性在System.Web.Http
- 8. 在不破壞向後兼容性的情況下集成報亭
- 9. maven;如何打破向後兼容性?
- 10. 使用Xcode 8的IOS 5兼容性
- 11. IOS 5 UIDocument子類向後兼容?
- 12. 我可以向List成員添加[XmlElement]屬性而不破壞向後兼容性嗎?
- 13. VB6的ActiveX停止破壞兼容性
- 14. Janrain和IOS 5兼容性
- 15. iOS靜態庫的向後兼容性
- 16. UIRefreshControl向後兼容性
- 17. 使用「源」破壞功能
- 18. 導軌功能測試不會破壞
- 19. iOS 6 API和向後兼容性
- 20. UISplitViewController iOS 7向後兼容性
- 21. Honeycomb SDK是否打破了GridView的向後兼容性?
- 22. 可在.so庫中更改哪些內容而不破壞兼容性
- 23. 非常向後兼容。每個功能
- 24. 功能ibv_get_cq_event()在破壞後不返回
- 25. 在平臺配置之間切換會破壞COM兼容性
- 26. 添加枚舉值會破壞二進制兼容性嗎?
- 27. 使用iOS 4.0庫時的向後兼容性
- 28. IOS SDK向後兼容
- 29. gluLookAt的兼容性功能
- 30. C#的向後兼容性
可能的重複[你如何可選地使用2.0兼容的應用程序中的iPhone OS 3.0功能?](http://stackoverflow.com/questions/986589/how-do-you-optionally-use-iphone-os- 3-0的功能-IN-A-2-0兼容的應用程序內) –
參見[如何使iPhone應用程序使用多個SDK(固件)版本兼容(http://stackoverflow.com/questions/3027120/how -to-化妝與iPhone應用程序兼容與 - 多SDK固件版本)。雖然這些問題的版本較舊,但適用相同的一般原則。 –