如果您將應用程序設置爲部署到較早版本,則最新的Xcode IDE需要您針對iPhone SDK 4進行動態處理棄用和新功能。爲iPhone 4 SDK構建的塊可以在部署到iPhone OS 3.0時工作嗎?
因此,我可以使用塊等新功能,並仍然可以在運行iPhone OS 3.0或3.1或3.1.3的設備上工作嗎?
我還沒有找到關於如何做以前的iPhone操作系統版本的向後兼容性文件。如果你能指出我的官方文件涵蓋如何做這件事,我會很感激。
如果您將應用程序設置爲部署到較早版本,則最新的Xcode IDE需要您針對iPhone SDK 4進行動態處理棄用和新功能。爲iPhone 4 SDK構建的塊可以在部署到iPhone OS 3.0時工作嗎?
因此,我可以使用塊等新功能,並仍然可以在運行iPhone OS 3.0或3.1或3.1.3的設備上工作嗎?
我還沒有找到關於如何做以前的iPhone操作系統版本的向後兼容性文件。如果你能指出我的官方文件涵蓋如何做這件事,我會很感激。
雖然最簡單的事情就是試試,但是我認爲認爲它們不會造成傷害(如果存在但未使用)(例如,使用運行時if語句繞過使用4.0之前版本設備上的代碼的塊),但它們肯定不能在4.0之前的設備上運行,並且所有的API都提供了使用塊的方法。總而言之,如果您有辦法在沒有塊的情況下完成某些工作,那麼沒有理由採用不同的方式來實現塊 - 這隻會增加冗餘和重複的代碼 - 因此,如果您希望將4.0版以前的設備,你不應該使用塊,但如果你想要/需要使用塊,不要使用塊,不要將目標操作系統設置爲低於4.0
使用諸如TARGET_OS_IPHONE的預處理器指令(http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/115-Configuring_Applications/configuring_applications.html)爲不同的iOS版本使用代碼。
據我所知,塊不會在3.2之前工作,因爲塊運行時不包括(像__NSStackBlock__
或類似的類)。除此之外,我的理解是如果您使用足夠新的編譯器,則可以使用塊編譯代碼。一個解決方案是在您的項目中有條件地包含一個自定義塊運行時。
我不明白爲什麼這個答案不被接受! – Emil 2011-01-07 03:14:21
不,塊不會在iPhone 3.2之前的版本中工作,沒有PLBlocks - 即便如此,採取塊可能不存在。
這並沒有真正回答主要問題,雖然這很有用。 – 2010-07-07 16:28:09
您問過如何有條件地爲舊版iOS編寫代碼,這就是您的做法。我錯過了什麼? – 2010-07-07 16:46:21
閱讀問題的第一段。 – Emil 2011-01-07 03:12:24