Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:从';分销'/生产构建?_Objective C_Ios_Ios5 - Fatal编程技术网

Objective c 目标C:从';分销'/生产构建?

Objective c 目标C:从';分销'/生产构建?,objective-c,ios,ios5,Objective C,Ios,Ios5,更新: 更多信息请点击此处: ~~~~~~~~~~~~~~~~~~~~~~~~ 形势 我有一些漂亮的beafy NSLog调用,用于调试应用程序中更复杂的部分。然而,我最近才了解到这些会影响运行时性能 目标 我想在Xcode中没有实际执行Product>run(又名command-R)的任何运行期间删除我的NSLog调用-特别是在应用商店中部署此功能的情况下,以及在与Xcode断开连接时运行应用程序的情况下(即在街上行走时只需点击图标) 建议的解决方案? 假设我已经创建了一个VIEW_DEBU

更新:

更多信息请点击此处:

~~~~~~~~~~~~~~~~~~~~~~~~

形势

我有一些漂亮的beafy NSLog调用,用于调试应用程序中更复杂的部分。然而,我最近才了解到这些会影响运行时性能

目标

我想在Xcode中没有实际执行Product>run(又名command-R)的任何运行期间删除我的NSLog调用-特别是在应用商店中部署此功能的情况下,以及在与Xcode断开连接时运行应用程序的情况下(即在街上行走时只需点击图标)

建议的解决方案?

假设我已经创建了一个VIEW_DEBUG的预处理器宏,下面的实现是否会有效地在我上面描述的情况下删除NSLog调用

    <bunch of code>

#ifdef VIEW_DEBUG
    NSLog(@"really complex logs entries");
#endif

    <even more code>

#ifdef视图\u调试
NSLog(@“非常复杂的日志条目”);
#恩迪夫
这对我来说是一个很难“测试”的问题,所以我想我会吸引更有经验的人

Xcode设置(供参考)


一个常见的解决方案是将以下代码放入前缀文件中(或者您可以创建一个专用类,并根据需要包含它):

在执行调试构建时,Xcode已经为您定义了调试(如屏幕截图所示)VA_ARGS是C99中引入的一种创建方法。
do/while
确保调试日志 即使它什么都不做,也有同样的净语法效果-不要担心无意义的循环,乐观主义者会帮你删除它


然后您可以像使用
NSLog
一样使用
DebugLog
。这将完全符合您使用
VIEW\u DEBUG
提出的要求,但无需将
#ifdef
条件复制粘贴一千次。

我在代码中总是使用
DLog
,效果非常好

// DLog is almost a drop-in replacement for NSLog
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

更多信息:

我不知道,这有用吗
#define NSLog/
#define DebugLog(…)NSLog(VA_ARGS)也可以工作。另外,您不需要使用do{}而使用GCC或LLVM时,#define DebugLog(…)工作得很好。修复了标记,我对此不负责:
#define DebugLog(…)NSLog(uu VA_ARGS)
感谢这两个注释者(尽管我不允许@both)-这就是我盲目复制和粘贴一个有着悠久历史的项目所得到的。上面已经做了更正,我已经将其标记为社区维基,因为现在声明答案的所有权并不准确。@Tommy&crew-对宏来说是新手,所以请确认我的理解:这些
#define
调用正在创建一个名为
DebugLog(…)
(但它可以被命名为任何名称,对吗?)
代表我的输入。因此,如果我编写
DebugLog(@“test!”)
,在调试模式下它将调出
NSLog(@“test!”)
,在非调试模式下,它将调出
,而(0)
我的所有
NSLog
s-正确吗?(或者,根据MrAnonymous,我甚至需要
而(0)
?)--另外,当我的手机与Xcode断开连接,但我正在运行一个“开发”构建时,调试是否会“打开”?@toblerpwn差不多就是这样-你会得到DebugLog(或者你想叫它的任何东西)这与定义调试时键入的
NSLog
完全相同,但与键入的
while(0)
完全相同,否则什么都不做。这将只取决于构建的类型,而不取决于您的设备是否被拴住,但会阻止您使用日志发布,而且您无论如何都无法对开发构建的发布性能进行准确评估——这就是为什么当您使用工具评测时,它会自动执行发布构建,例如。
// DLog is almost a drop-in replacement for NSLog
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);