作者leondemon (狗狗)
看板MacDev
标题[问题] preprocessor macros
时间Thu Aug 22 11:04:00 2013
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)
1F:推 kiii210:好像是 #if __has_feature(objc_arc) 08/22 11:57
2F:→ yuanruo:去找有支援ARC的Open Source 然後用non ARC执行 08/22 15:00
3F:→ yuanruo:如果他有提示 那就照抄就好~ 08/22 15:00
4F:推 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)
6F:→ uranusjr:超多, 自己查 orz 08/23 00:11
7F:→ leondemon:感谢 Orz (好像没有`DEBUG`?) 08/23 00:31
8F:→ uranusjr:DEBUG 是 Xcode 在 compile 的时候设定的, 不是 compiler 08/23 00:42
10F:→ uranusjr:以知道什麽状况有哪些 flags (基本上都和 scheme 有关) 08/23 00:48