推 kiii210:好像是 #if __has_feature(objc_arc) 08/22 11:57
→ yuanruo:去找有支援ARC的Open Source 然後用non ARC執行 08/22 15:00
→ yuanruo:如果他有提示 那就照抄就好~ 08/22 15:00
推 tentenlee:是#endif吧 不只是#end 08/22 15:04
謝謝 一時筆誤
最主要是因為在 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)
→ uranusjr:超多, 自己查 orz 08/23 00:11
→ leondemon:感謝 Orz (好像沒有`DEBUG`?) 08/23 00:31
→ uranusjr:DEBUG 是 Xcode 在 compile 的時候設定的, 不是 compiler 08/23 00:42
→ uranusjr:以知道什麼狀況有哪些 flags (基本上都和 scheme 有關) 08/23 00:48