[問題] preprocessor macros

看板MacDev作者 (狗狗)時間10年前 (2013/08/22 11:04), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串1/1
google 一直找不到 有哪些環境變數的列表 目前我只知道 DEBUG 所以可以根據是否在 DEBUG 下來寫 code 如 #if DEBUG #define TEST_MODEL_ENABLE YES #else #define TEST_MODEL_ENABLE NO #end /// #if TEST_MODEL_ENABLE NSLog(@"using test model"); #endif 可是現在想找 ARC 是否有 enable 不知道該用哪個環境變數來判斷 有 Apple 提供的列表嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.125.199 ※ 編輯: leondemon 來自: 118.163.125.199 (08/22 11:13)

08/22 11:57, , 1F
好像是 #if __has_feature(objc_arc)
08/22 11:57, 1F

08/22 15:00, , 2F
去找有支援ARC的Open Source 然後用non ARC執行
08/22 15:00, 2F

08/22 15:00, , 3F
如果他有提示 那就照抄就好~
08/22 15:00, 3F

08/22 15:04, , 4F
是#endif吧 不只是#end
08/22 15:04, 4F
謝謝 一時筆誤 最主要是因為在 block 中用 `self` 或是 ivar 會導致 `self` 被 retain 因此需要先設一個區域變數 並轉成 weak 但在 ARC 或是 non-ARC (MRC) 中的 modifier不太一樣 因此我想要寫一個簡單的 macro 方便使用 如: ======= #if ARC // 如果有 ARC (但我不確定是否是用`ARC`來判斷) #define declareWeakSelf() __weak typeof(self) weakSelf = self // 用__weak #else #define declareWeakSelf() __block typeof(self) weakSelf = self // 用__block #endif ======= 這樣就可以在 block 前用 declareWeakSelf() 來快速宣告 weakSelf,例如: ======= declareWeakSelf(); [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2){ [weakSelf compare:obj1 with:obj2]; // weakSelf 不會被 retain }]; ======= 想多知道一些開發上的 preprocessor macros 這樣有時候寫 code 會比較方便 只是一直找不到... :( ※ 編輯: leondemon 來自: 114.198.184.235 (08/22 23:54)

08/23 00:11, , 6F
超多, 自己查 orz
08/23 00:11, 6F

08/23 00:31, , 7F
感謝 Orz (好像沒有`DEBUG`?)
08/23 00:31, 7F

08/23 00:42, , 8F
DEBUG 是 Xcode 在 compile 的時候設定的, 不是 compiler
08/23 00:42, 8F

08/23 00:47, , 9F
的功能 http://d.pr/i/PlBW 這些去看 project 設定就可
08/23 00:47, 9F

08/23 00:48, , 10F
以知道什麼狀況有哪些 flags (基本上都和 scheme 有關)
08/23 00:48, 10F
文章代碼(AID): #1I5N-ZjE (MacDev)