Category: Object-C
-
Git .gitignore file for Xcode projects
最近才開始整理一些在寫 Obj-C 時當作測試用的範例程式碼,想丟去 GitHub 作個紀錄。 因為這樣才開始在 Xcode 裡使用 Git。雖然 Xcode 本身有整合 Git,但是那個整合還蠻陽春的,連 .gitignore 要怎麼設定都沒點提示。 .gitignore 是 Git 程式碼管理系統裡用來指定哪些檔案不需被追蹤用的文字檔。 看在 Xcode 專案裡的檔案分佈,哪些要忽略還真不容易分辨。一樣是在 StackOverflow 看到幾個解答,在這筆記一下。 # Xcode .DS_Store */build/* *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata profile *.moved-aside DerivedData .idea/ *.hmap 這樣再看 Xcode projects 就清爽多了。 Update Jun 28, 2013 另一種寫法 # Exclude the build directory…
-
iOS: Disable Automatic Reference Counting for Some Files
開發 iOS 所使用的 Objective-C 語言隨著 APP 生態發展,也變成一門挺熱門的語言。相對地,其發展也進步許多。 Apple 於 2011 年才在 Objective-C 中導入了 Automatic Reference Counting (ARC) 機制,做為自動記憶體管理的解決方案。在 ARC 出現之前,Obj-C 中記憶體釋放完全是由開發者操作的,對於慣用 script 語言的我來說相當的不習慣,而且也覺得很囉嗦。我偏好 PHP, Python, Ruby 這類可以寫得很簡潔,專注在我要解決的問題與需求上的語言。從 C 演化來的 Obj-C 宛如火星文一般。 所以我是很習慣在開 Xcode 專案時使用 ARC 機制的,可以不用寫 release 方便許多。我連 @synthesize 都沒在寫的。 前面扯這麼多,當然是在鋪 ARC 的梗。開發過程中常會用到第三方的 Library 或 Example code 來加速開發或完成某些外部資源串接。這些第三方的 code 有許多仍是用 non-ARC 模式開發的 (就是手動管理記憶體)。但是專案開了 ARC 模式後編譯 non-ARC…
-
How to know if Xcode iOS project is using ARC?
基本問題,如何查詢 Xcode 的 iOS 專案是否有使用 ARC (Automatic Reference Counting)? 在 Xcode 中點選 Target -> Build Settings -> 搜尋 automatic,就會看到 Objective-C Automatic Reference Counting 是 YES 還是 NO 了。
-
取出浮點數的小數部份
老實說,平常很少有標題這樣的需求。這天在寫一個分頁計算程式,其中最後一頁除下來 (分頁總長度 / 顯示長度) 會出現餘數,需要做點特別處理。 然後就很習慣性地開始想說怎樣才能快速檢查 float 浮點數的小數部份是不是 0.0。結果都還沒開始思考,就剛好在 StackOverflow 看到一個 Answer,只有一行。 if(num % 1 != 0) do something! // eg. 23.5 % 1 = 0.5 對吼,取 1 的餘數就好了啊 XDDDD 立馬改寫成 Objective-C 的版本,完成了工作。 if (0.0f != fmodf(currentPage, 1.0f)) { // do something } Obj-C 的取餘數要用 fmodf 這點一直很不習慣,老是忘記,總是習慣性地寫百分比符號….
-
iOS: 尋找模擬器的暫存路徑
在 iOS APP 的開發過程,大量依賴 Xcode 內建的模擬器來做雛型的測試。其中也需要知道文件的狀態變化是否如預期一般運作。 但是模擬器的文件暫存路徑會有一組 UID 亂數,當手上的專案一多就分不出來是哪個資料夾了。可以用以下方法取得該 App 的文件路徑。 NSLog(@”%@”, [[NSBundle mainBundle] bundlePath]); 結果如下: /Users/filework/Library/Application Support/iPhone Simulator/6.1/Applications/642CB434-53D0-440A-9BB4-A5E1801D36EE/qxFMDB.app 若要列出目錄下的檔案,用以下方法。 NSFileManager *fm=[NSFileManager defaultManager]; NSString *path=[[NSBundle mainBundle]bundlePath]; NSArray *info=[fm contentsOfDirectoryAtPath:path error:nil]; NSLog(@”list:%@”,info); 執行結果如下: list:( “Default-568h@2x.png”, “Default.png”, “Default@2x.png”, “en.lproj”, “Info.plist”, “Main.storyboardc”, PkgInfo )
-
iOS: FMDB with ARC Semantic Issue
身為一個 iOS 界的菜菜子,很多元件的使用並不是很熟悉。最近有個案子需要跟 SQLite 打交道,FMDB 是一套頗受推祟的 SQLite wrapper,可以簡化 SQLite 的操作。 FMDB on Github 下載套件。解壓縮後將 src 資料夾加入 XCODE 專案就可以使用了。當然,別忘了要加 libsqlite3.dylib。 不過久久沒用 FMDB,一按下 compile 就爆了…. 噴出四個 Arc Semantic Issue。 呃…. 喔,我忘了要移除 src/fmdb.m 這個檔案…. 移除掉再重新編譯就可以了。
-
Xcode "PCH file built from a different branch" Error
最近更新 Xcode 開發工具到 4.6.2 版後,編譯一些之前寫的舊程式會出現如下的錯誤。 PCH file built from a different branch ((clang-425.0.27)) than the compiler ((clang-425.0.28)) 看來這是 Xcode 4.6.2 所造成的問題,根據官方文件說明,只要選擇 Xcode > Product > Clean 後就可以正常編譯了。
-
Objective-C: Use regular expression to replace string in NSString
在寫一個關於字串處理的小作業時想到的,先留個紀錄。 NSString * strPNum2 = @”(886)02-3356873″; NSError *error = NULL; // regex 用 \ 做跳脫,但是在 C 裡斜線本身也要跳脫,所以寫成 \\( 來跳脫左括號 NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@”[\\(\\)-]” options:NSRegularExpressionCaseInsensitive error:&error]; NSString *modifiedString = [regex stringByReplacingMatchesInString: strPNum2 options:0 range: NSMakeRange(0, [strPNum2 length]) withTemplate:@””]; NSLog(@”%@”, modifiedString); 電話號碼 (886)02-3356873 會改成 886023356873。
-
Bookmark: Learning Object-C by Cocoa Dev Central
學習 Apple APP 開發會經歷好幾個階段,像是如何使用 XCode 開發工具,如何撰寫 Object-C,以及如何使用 Cocoa。在學習 Object-C 的過程中逛到這個專門提供 iOS 程式開發教學的網站 Cocoa Dev Central,文章簡單易懂,排版也非常容易閱讀。其中關於 Object-C 的章節是我最近在閱讀的。 http://cocoadevcentral.com/d/learn_objectivec/