您的位置:首页 > 移动开发 > Swift

添加PCH文件以及自定义输出(OC & Swift)

2016-05-02 23:23 381 查看
[b]运行环境: Xcode 7.3 OX 10.11.3
[/b]

一、PCH文件

说明

* PCH文件的内容能被项目中的其他所有源文件共享和访问(全局引用);

* PCH文件一般存放常用的宏 & 头文件;

* 可以存放打开和关闭日志输出功能(NSLog & print);

创建PCH文件

1)新建文件 ⌘+N;

2)选择Other-PCH File



3)设置名称-添加到项目-Create



添加PCH文件

1)选择目标Targets - Build Settings - 输入Prefix;

2)设置
Precompile Prefix Header
YES
;

3) 设置
Prefix Header
$(SRCROOT)/你的PCH文件名称.pch
;



二、自定义输出

1. 说明

1) 输出日志是会大量损耗系统性能;

2) 输出的信息很容易会被截取到,导致信息不安全;

3) 一般做法:自定义输出,Debug 阶段输出,release 阶段忽略。

2. OC版

// GLog 替换 NSLog 来输出
#ifdef DEBUG
#define GLog(...) NSLog(__VA_ARGS__)
#else
#define GLog(...)
#endif

// 输出函数与行号
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"[函数名:%s]" "[行号:%d]:" fmt), __FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...);
#endif

参数说明:
1)  __VA_ARGS__ 是一个可变参数的宏(C99新增),宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
有了以上这几个宏,特别是有了__VA_ARGS__ ,调试信息的输出就变得灵活多了。


3. Swift版

/// 输出日志
///
/// - parameter message:  日志消息
/// - parameter logError: 错误标记,默认是 false,如果是 true,发布时仍然会输出
/// - parameter file:     文件名
/// - parameter method:   方法名
/// - parameter line:     代码行数
func printLog<T>(message: T,
logError: Bool = false,
file: String = __FILE__,
method: String = __FUNCTION__,
line: Int = __LINE__)
{
if logError {
print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
} else {
#if DEBUG
print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
#endif
}
}


注意:

在Swift中,如果你设置了该方法,替换完了,但是。。。。不打印任何输出信息,你需要进行如下操作:

1)选择目标Targets - Build Settings - 输入swift;

2) 在
Other swift flags
中设置新增
-D DEBUG


4. 自定义DEBUG相关的宏

1)选择目标Targets - Build Settings - 输入debug;

2)选择
Preprocessor Macros -> Debug
,添加自定义的宏即可。

三、常见问题

Q1: 添加了PCH文件,但是一直报如下错误:



AQ: 检查PCH在
Build Settings
中是否设置正确,并且
Prefix Header
路径需要带上
.pch
后缀。

Q2: OC版本设置自定义输出,不打印任何输出。

AQ: 检查当前的模式是否为 DEBUG模式,在
info->Build Configuration
中设置为Debug



Q3: swift 版本设置自定义输出,无效

AQ: 参考 swift自定义输出的注意
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: