Xcode预处理命令、控制台调试命令、 iOS事件拦截

1.Xcode预处理命令

#define              定义一个预处理宏
#undef               取消宏的定义
#include            包含文件命令
#include_next   与#include相似, 但它有着特殊的用途
#if                      编译预处理中的条件命令, 相当于C语法中的if语句
#ifdef                判断某个宏是否被定义, 若已定义, 执行随后的语句
#ifndef             与#ifdef相反, 判断某个宏是否未被定义
#elif                  若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
#else                与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
#endif              #if, #ifdef, #ifndef这些条件命令的结束标志.
defined            与#if, #elif配合使用, 判断某个宏是否被定义
#line                标志该语句所在的行号
#                      将宏参数替代为以参数值为内容的字符窜常量
##                   将两个相邻的标记(token)连接为一个单独的标记
#pragma        说明编译器信息#warning       显示编译警告信息
#error            显示编译错误信息


例子:下面是利用‘#ifdef DEBUG’,来控制NSLog只有在debug模式下输出数据,并且输出在哪个类,第几行

#ifdef DEBUG
#   define NSLog(fmt, ...) {NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);}
#else
#   define NSLog(...)
#endif

2.控制台调试命令

命令                       解释    

break NUM              在指定的行上设置断点。    

bt                      显示所有的调用栈帧。该命令可用来显示函数的调用顺序。    

clear                   删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM    

continue                继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。    

display EXPR          每次程序停止后显示表达式的值。表达式由程序定义的变量组成。    

file FILE               装载指定的可执行文件进行调试。    

help NAME              显示指定命令的帮助信息。    

info break              显示当前断点清单,包括到达断点处的次数等。    

info files              显示被调试文件的详细信息。    

info func               显示所有的函数名称。    

info local              显示当函数中的局部变量信息。    

info prog               显示被调试程序的执行状态。    

info var                显示所有的全局和静态变量名称。    

kill                    终止正被调试的程序。    

list                    显示源代码段。    

make                    在不退出 gdb的情况下运行 make 工具。    

next                    在不单步执行进入其他函数的情况下,向前执行一行源代码。    

print EXPR              显示表达式 EXPR 的值。     

print-object            打印一个对象    

print (int) name      打印一个类型    

print-object [artist description]   调用一个函数    

set artist = @"test"    设置变量值    

whatis                  查看变理的数据类型 


3. iOS事件拦截

在iOS系统中,一共有三种形式的事件:触摸事件(Touch Event),运动事件(Motion Event)和远端控制事件(Remote-control Event)。顾名思义,触摸事件就是当用户触摸屏幕时发生的事件,而运动事件是用户移动设备时发生的事件:加速计,重力感应。远端控制事件可能比较陌生:如通过耳机进行控制iOS设备声音等都属于远端控制事件

当用户发起一个事件,比如触摸屏幕或者晃动设备,系统产生一个事件,同时投递给UIApplication,而UIApplication则将这个事件传递给特定的UIWindow进行处理(正常情况都一个程序都只有一个UIWindow),然后由UIWindow将这个事件传递给特定的对象(即first responder)并通过响应链进行处理。虽然都是通过响应链对事件进行处理,但是触摸事件和运动事件在处理上有着明显的不同(主要体现在确定哪个对象才是他们的first responder)


第一步:新建一个类继承于UIApplication

第二步:重写sendEvent方法(拷贝下面代码)

- (void)sendEvent:(UIEvent *)event
{
    //如果不是测试,为了性能方面的优化,需要增加判断:‘是否有发送事件的必要’。否则,只要有事件就发送太过消耗性能,且无必要
    if (event.type == UIEventTypeTouches) {
        if ([[event.allTouches anyObject] phase] == UITouchPhaseBegan) {
            [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"touchNotification" object:nil userInfo:[NSDictionary dictionaryWithObject:event forKey:@"data"]]];
        }
    }
    [super sendEvent:event];
}


第三步:在main.m里用下面代码替换,注释掉原来的。(下面的MyApplication是你新建继承于UIApplication的类)

return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class]));


此时,你已经可以接受到所有的‘事件’,do everything your want now!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值