天天看點

iPhone開發中的問題整理(一)

看到很剛開始開發iPhone軟體的朋友問很多問題,其實同樣的問題我也碰到過, 是以抽時間把能想到的或者碰到的問題彙總一下, 一來可以給自己做個備忘也可以和朋友們分享探讨。

1. iPhone SDK 開發能不能使用C / C++ 語言?

Answer:iPhone SDK的開發的基礎架構是基于cocoa庫的,Objective-C 是cocoa的開發語言, 但基于Objective-C的特性,在iPhone程式中可以使用C/C++進行功能開發以及使用第三方C/C++庫。

2. 如何才能使用 C /C++?

Answer: 當你需要使用C/C++時, 可以将類實作的檔案名改為.mm, 這樣編譯器就知道改檔案中包含C/C++代碼 (注:此時在工程屬性的編譯選項必須設定為根據檔案類型或者objective c++或者C++, 具體位置:GCC 4.0 -Language -> Compile Sources As  )

3.  Objective-C類屬性關鍵字nonatomic時什麼意思?

Answer: 這時Objective-C的特性, 改關鍵字用來告訴編譯器在自動生成通路器代碼時該如何處理線程安全。預設情況下所有屬性都是atomic也就是線程安全的,但因為運作效率較低。考慮到效率,一般都采用nonatomic,然後自己做線程安全的處理。

4.  如何避免因為記憶體不足導緻程式崩潰?

Answer: iPhone程式可用的記憶體很小, 蘋果官方沒有給出明确的上限, 但根據網際網路上其它開發人員的總結最多不超過20MB,這一數字未經證明,但我曾碰到過程式在配置設定13Mb記憶體的時候就頻頻crash情況。 是以, 要想避免由于記憶體不足導緻的不穩定,還是按照蘋果的建議

Load resources lazily, 就是所有資源都是在使用的時候再加載,用完立刻釋放。 比如,你的程式需要3張圖檔在某個View中顯示,以往的桌面程式的做法是在程式啟動的時候加載該3張圖檔到記憶體, 用的時候直接調用記憶體以提高效率。 但這樣的做法在iPhone中不可取,iPhone對于資源的原則是随用随取,用完釋放。

對象的配置設定也盡量避免使用autorelease,善用NSAutoreleasePool 記憶體池。尤其是在循環中。

大資料量采用SQLite存儲, 存儲快、效率高

絕對避免記憶體洩露,iPhone程式崩潰往往是擁有記憶體洩露導緻,可以使用xcode->Run->Start With Performance Tool -> Leaks 來檢查洩露情況

5. 如何儲存程式中的使用者輸入資訊?

Answer: 有時候需要儲存使用者輸入的資訊資料或者程式的狀态,最好的方式是采用plist存儲。 用plist存儲優點甚多,NSArray、NSDictionary等容器類都支援直接輸入輸出plist格式的檔案。 但需要注意的是, 輸入、輸出的檔案格式和相應容器類要保持一緻。 也就是說,使用[array writeToFile] 輸出的plist檔案必須用[array arrayWithContentsOfFile:]來讀取,如果混用了array和dictionary則會導緻程式崩潰。

6. 如何彈出網絡連結對話框?

Answer: 如果程式中用到網絡,按照app store的規定需要彈出網絡連接配接對話框提示使用者。隻需要在Info.plist檔案中添加信的條目:UIRequiresPersistentWiFi 類型為Boolean,值為YES即可。

7. 如何顯示頂部狀态欄中的網絡忙訓示器?

Answer: 設定networkActivityIndicatorVisible = YES即可, 不需要時将其指派NO即可

8. 如何在程式圖示上顯示數字?

Answer: 在程式退出或者改變時修改[UIApplication sharedApplication].applicationIconBadgeNumber的值即可

9.  如何比較兩個NSString字元串是否一樣?

Answer: 使用NSString類的isEqualToString: 方法來判斷字元串是否相同,也可以使用[NSStringObject compare:]==NSSameOrder, 注意:isEqual用于判斷兩個對象是否一樣而不是内容

10. 如何改變導覽列的背景顔色?

繼續閱讀