摘要: 在代码中直接调用DebugBreak()函数,可以使程序中断运行,和在IDE中设置断点中断运行的道理是一样的。用这种方式,一些情况下比打断点更方便调试,如下,在test()函数返回0时激活断点#include "debugapi.h"int test(int x){ if (x > 0) return 1; return 0;}int _tmain(int argc, _TCHAR* argv[]){ if (test(-1) == 0) { DebugBreak(); } return 0;}有时编译时编译器会报一个"No Target Architect 阅读全文
posted @ 2013-09-20 23:52 linear 阅读(888) 评论(0) 推荐(0) 编辑
摘要: C++里,如果程序员没有显式的定义默认构造函数(default constructor),编译器会在需要的时候生成一个,也就是隐式地声明出来。隐式声明的默认构造函数有两种,一种是trivial(无用的) constructor,什么都不做;另一种是nontrival constructor,编译器合成的是后者。在四种情况下,编译器需要合成nontrival constructor:1. 带有"Default Constructor"的成员类对象class A {public: A(), ... };class B {public: A a;};int f(){ B b; / 阅读全文
posted @ 2013-01-06 20:43 linear 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: NSDateFormatter用于NSDate与NSString之间的转换:NSDate转为NSString:NSDate *date = [NSDate date];NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; //设置时间输出的格式为年-月-日 时:分:秒NSString *dateDesc = [dateFormatter stringFromDate:date];NSString 阅读全文
posted @ 2012-11-05 22:12 linear 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 本文摘译自Things to Optimize Besides Speed and Memory,由于本人英语水平有限,仅翻译了一些重点部分,多有错误,敬请谅解。与优化内存,优化速度一样重要的优化:1. 程序的耗电量,产热量和风扇噪音(笔者注:减少无谓的运算,不要用无限循环进行等待)。2. 写磁盘,注意是否经常重写一个未改变的文件到硬盘上。3. 软件文档的大小,复杂度。4. 阅读tutorial的时间,以及知识要求。5. 网络流量6. #include文件的大小,更准确的讲是对接口的优化(笔者注:减少代码中对include的滥用也是很重要的,过多无用的include会使代码乱作一团,也会在修改 阅读全文
posted @ 2012-09-11 21:30 linear 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 使用地图钉,首先我们需要为地图钉创建一个附注类(Annotation),代码如下:@interface MyAnnotation: NSObject<MKAnnotation>// 实现MKAnnotation的方法,该方法在地图钉被拖拽时被调用,也可主动调用,用来更改地图钉的位置。-(void) setCoordinate:(CLLocationCoordinate2D)newCoordinate;Annotation不仅记录了地图钉的位置,还包括地图钉的名称(property title)以及副名称(property subtitle)。@implementation MyAn 阅读全文
posted @ 2012-08-09 23:44 linear 阅读(1571) 评论(0) 推荐(1) 编辑
摘要: CLLocationManager类的作用是监听GPS的位置消息,当用户坐标发生变化时,会调用下面的方法进行通知:-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;问题来了,当我们把newLocation中的坐标映射到MKMapView控件上时,会发现这个点跟本不是我们所在的位置,而是离我们百米左右的某个地方。至于原因,。那么,我们需要将原始的(真实的)位置坐标,转换为有 阅读全文
posted @ 2012-07-20 01:08 linear 阅读(2733) 评论(0) 推荐(0) 编辑
摘要: 有关ARC的背景和概念不做详细说明了,简而言之,使用ARC,程序员不需要再关心对象的生命周期,编译器在编译时会聪明的补上这些代码。使用ARC的一些规则:1. 不允许调用对象的retain, release, auto-relase, retain count等方法,也不允许通过类似@selector(retain)的方法进行间接调用。2. 不允许调用对象的dealloc方法。 虽然重定义类的dealloc方法是允许的,但不能在其中调用[super dealloc]或任何成员变量的dealloc方法,只允许进行一些善后工作,比如释放某些文件资源。3. 在@property声明中,不再允许使用re 阅读全文
posted @ 2012-07-03 23:47 linear 阅读(873) 评论(0) 推荐(0) 编辑
摘要: 成员变量须私有化,是面向对象基本思想之一。几乎每本讲到面向对象编程的书里,都会告诉读者“类的成员变量一定要定义为私有的(private)”变量私有化的好处1. 在setter中可以加入合法性检查,比如设置颜色的函数中,对于RGB颜色要判断其值在0~255之间。2. 更新与被设置变量相关的其它变量的值,比如在一个潜水艇模拟系统中,改变了其水下深度时,要相应的更新所受压强。3. 在debug时,可以在其中,尤其是在setter中加入追踪log。4. 在多线程环境中,如果要保护对象的并发访问,则必须在getter/setter中加入同步锁。所以,可以看出使用getter/setter访问私有变量是很 阅读全文
posted @ 2012-07-03 12:08 linear 阅读(557) 评论(0) 推荐(0) 编辑
摘要: Android和IOS在UI线程上的设计思想有很多相似的地方1. UI线程,即主线程,负责显示软件内容,及接收用户的输入。2. UI线程不能被耗时的任务长时间占据,当超时一定时长时,会弹出警告框或结束App。3. 非UI线程不允许直接对控件进行操作,需要发消息通知主线程来update UI。 阅读全文
posted @ 2012-05-04 17:11 linear 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 学习Android的线程交互,要掌握Thread, Looper, MessageQueue和Handler这四个概念。1. Thread代表线程,不是每个Thread都有Looper,但Looper必须附在一个线程上。2. Looper内部维护一个MessageQueue,即消息队列。3. 每个MessageQueue中有一个Handler,Handler对象用来发送消息到MessageQueue中,或接收Looper(从MessageQueue中)送来的消息。获取Looper对象的引用:Looper looper = Looper.myLooper();为了与Looper进行沟通,我们需要 阅读全文
posted @ 2012-05-04 16:50 linear 阅读(504) 评论(0) 推荐(0) 编辑