逝水流年

This is a blog to record my life, my work, my feeling …

01092012学习记录

今天又学到一招STL的用法,嘿嘿。关于遍历容器的时候删除迭代器的方法:   例如有一个vector; vec,及指向该vector的迭代器it;要删除其中值等于5的所有项,

1
2
3
4
5
6
7
for(it = vec.begin(); it != vec.end(); it++)
{
    if(5 ==*it )
    {
        vec.erase(it++);//important
    }
}

比我以前的做法效率要高很多。利用的++运算符的特性,以前怎么就没想到呢?看来看高手的源码还是很有用滴!

今天把任务提交给老大了,后天进行讲解,希望能perfect!Fighting!

记录我的新工作(十四)

最近两天由于太忙了,昨天公司又年会,回家太晚所以没有更新。对于工作系列打算写到这篇为止,不再继续更新。后面将会按照技术内容进行更新,希望能跟大家分享更多更好的技术,共同探讨问题,提升技术水平。

记录我的新工作(十三)

好累,头疼好像是感冒了。

学到一个STL的新使用方法:for_each(XX.begin(), XXX.end(), mem_fun_ref(&Fun));

关于桥接模式的应用,在定位标记中应用到了。将具体种类的标记的显示和抽象分开,降低耦合性,两部分可以独立变化。

太晚了,今天就写到这吧。明天多总结下。

龙门飞甲的一点小小感想

徐大侠的新瓶装旧酒,一个龙门客栈的故事翻来覆去的换演员,框架还是那套框架,特技更炫了,其他的视乎没有太多亮点了。桂纶镁的演技不错,颠覆我在我心里面的形象,还有陈坤。当然其他演员也都很优秀,春哥的表演也实在是搞笑,哈哈笑死我了。希望徐大侠能拍出更多经典,而不是翻新!作为武侠迷,挺你!

记录我的新工作(十二)

2011年的最后一天,依然继续努力的工作着,不管2012怎么样,至少我是努力了,奋斗了,无悔!

晒晒今天学到的内容吧

1、四个库函数:

round是取最近的整数值,五舍六入,如果想要取大整数,可以roundf(X+0.5);

floor(x),向下取整,return the lastest integral value that is not greater than X。

log2f是以2为底的对数。

powf(x, y);是X的Y次幂。

这四个函数都跟UIScrollView的zoom和pan的计算有关。

2、在Quartz和OpenGL两种方式下,坐标系是不一样的。Quartz的坐标系跟windows基本一致,左上角为原点,横向为X轴,向右为正;纵向为Y轴,向下为正。而OpenGL中,左下角为原点。

3、UIScrollView的Offset的计算,是以偏移后矩形的左上角(原点)与原始左上角(0,0)点的差得到的。view的frame和bounds在scrollview下也是不同的。frame是父的rect,而bounds是本身的rect。

4、关于对齐矩形视图的计算,是将屏幕视图的边根tile的bounds对齐,如果不够一个tile,则补全。哈哈,看了快2天,终于完全弄清楚了。

这两天对矩形的偏移和放大的计算有点进入误区了,抽象意识还是不够,将图形画出来,想了半天才搞清楚,差点有点要放弃的感觉,有时候觉得自己是不是真的不适合干程序员!但是坚持过来,一切都好转了,没有过不去的坎!下面还需要加快进度,对search部分的placemark还没有将细节弄清楚,节后1天搞清楚,尽快将task给finish了。

记录我的新工作(十一)

又是一天的代码,眼干头大,今天主要将前几天的内容总体在捋顺一遍,深挖代码的细节,不断的提问,不断的解决问题,通过这个过程达到深入。这几天一直通过这样的努力来学习,发现有很大帮助。首先是看代码有了明确的目标,每次将问题解决,都有小小的成就感,可以促进继续下去。人老了,记性不好了,但是方法确是更多了,更有效了,这也是工作年限的一种附加值吧! 第一个细节点就是CALayer的方法andSubLayer,可以添加重复的layer,不会重复,只是将该层置前!

第二个细节点是关于C/C++的左移运算,

笨死了,查了资料才发现原来是对左边的表达式或值进行左移,移动位数为右值,以前一直理解的是相反的。NND

第三通过跟踪运行,对pickerview控件的数据源的加载了解了实现原理。通过<UIPickerViewDelegate, UIPickerViewDataSource>;协议的方法的重写,自动实现对数据的读入。

1
2
3
4
5
6
7
8
9
10
- (NSInteger) pickerView: (UIPickerView *)pickerView
numberOfRowsInComponent: (NSInteger) component
{
    return [pickerData count];
}
#pragma mark Picker Delegate Methods
- (NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger) row
forComponent:(NSInteger) component{
    return [pickerData objectAtIndex:row];
}

然后就是对地图数据的显示和处理的深入了解了,目前对于所有流程都很清楚,但是在对平移和缩放的时候,地图数据的计算上面还有点小疑问需要明天继续,争取2012年来到之前把这块全部解决掉。

记录我的新工作(十)

今天状态不太好,车上只看了一小节,没有啥收获。只是对Picker控件有了进一步的了解。

上午收到email,要填写timesheet,结果我的ID和密码还没有下来,发了我的第一封email,跟老美申请timesheet。

继续看程序吧,结果虚拟机无法运行模拟器了,NND,真的喝口凉水都塞牙啊!一直捣鼓到下午3点才把模拟器搞好,弄了半天原来是虚拟机没有连接到Internet导致模拟GPS无法接收到信号。通过排查问题,我将startup部分也略微了解了一些,不停的加断点,不停的注掉代码,运行,查看效果,整个过程太郁闷了,头都大了。

昨天发下了一个问题,解决了我以前一直没有能解决的问题,就是关于单件模式如何释放的问题。NND,刚看到那块代码我还以为是个BUG呢,结果人家用了智能指针,单件模式的释放问题就这么简单的给解决了。

导航和地图的接口也是在地图类中,每个部分例如导航,搜索都有一个对内部的抽象接口类,地图类中将这些类的对象进行了聚合,通过聚合的对象进行相互关联操作。

今天没有状态,看来明天得加把劲了,把今天落下的补上。早日把系统整体弄清楚。

记录我的新工作(九)

从今天开始着重写对工作内容的分析和理解,穿插一些个人感受啥滴!!!

通过对代码的继续阅读,不仅对已经了解的部分有了更深入的理解,而且发现这个工程实在是内容太丰富了,现在看到的仅仅是冰山一角,里面真的有好多内容可以学习。

这里面核心结构就是地图类,所有关于地图的信息处理,最终都是由它进行操作的。

今天对地图数据的请求又有了更深的理解,它里面封装了一个关于坐标的迭代器,用于叠加矩形和点集这两种结构的所有点,比如要申请一个矩形区域的所有地图图片,那么需要将矩形的每个点(行和列)进行迭代,取数据才行。根据点的坐标从服务器请求相应的地图图片过来。

搜索方面今天进行了一些跟地图有接口的部分的了解,搜索也是一个非常大的功能,里面涉及的内容非常多,用到的技术也非常多,不过各个部分直接的耦合性比较低,都是通过接口进行互操作,并将对内部调用的接口都封装层抽象类和代理实现类。

记录我的新工作(八)

早晨就开始拉肚子,真的很郁闷,还好有地铁,又赶上了867,嘿嘿,正点到公司,木有迟到哦!

今天三个主要的任务:

1、将静态库.a跟UI层的交互给弄清楚。

2、将zoom的原理给弄清楚。

3、对tile的display的原理弄清楚。

花了一上午的时间,做了个DEMO,终于把静态库部分搞清楚了,嘿嘿,原理很简单,没有所谓的回调函数,只是将.a中的函数的实现放到了上层应用,因为是静态加载,在同一个进程空间,所以调用没有什么问题。而且.a对上层的接口可以放到任意一个头文件中。上层和静态库直接跟WINDOWS下的调用还是有点区别,更像是同一个程序。关于Unix下的编程还需要进一步学习。

顺便对编译选项中的GCC及llvm之间的区别,看我们的工程都选择的LLVM,原来它会对程序进行优化,提高编译速度。

在将ZOOM的流程捋顺的过程中,对CALayer和UIScrollView两个控件的原理有了更深刻的理解,通过对CALayer的显示的了解,对地图在UI的实现终于弄清楚了。哈哈,而ZOOM的UI就是UIScrollView的实现,对界面熟悉后,可以对底层有更深入的了解,这方面都是相辅相成的,哪点都不能放过。

每个程序只有一个窗口Window,都有一个根Layer负责显示层,layer可以有sublayer,每个地图的tile都是一个layer,有自己的Rect显示区域,将同一个zoomlevel的所有tiles都作为这个级别的layer的sublayer,并且按照顺序排列,就可以显示出地图来了。UIScrollView可以对它的content进行拖到和缩放,它将地图layer作为子视图来显示和拖动或者缩放,通过事件进行相应的位置调整或更新地图。ZoomAndSetCenter。

记录我的新工作(七)

今天是2011年最后一周了,早起发了个微薄,为了新年奋斗最后一周!为了应付堵车,还是车上看书最好了,充分利用琐碎时间啊!哈哈,GTD没有白学。

早上竟然在公交车上遇到了新同事,竟然住的比我还远,太牛了哈哈。终于有熟悉了一个人了,哈哈,很兴奋啊,慢慢的融入团队了,虽然外企的团队不怎么样,嘿嘿但好歹也是个团队啊!

竟然可以报销餐补了,嘿嘿,多亏我把票都带着了,144元小CASE了。工资卡也办好了,嘿嘿,年前还能发半个月工资过年!

下午签字的时候顺便跟老大提了下我的MAC机器的问题,老大告诉我说老美那边休圣诞节,所以还得推迟两周,嘿嘿,不过J已经帮我把模拟器搞定了,终于可以看到界面了。耶!不过木有数据,很多功能没法跑起来。

原来是我的工程选择错了,他们有两个工程,一个是通用的,一个是给VZ定制的,通过一个宏来区分。不过后来因为一些原因,通用版和定制版无法区分了,代码都加在定制版本中了,通用版就没用了。可见是一大失败!外企对这方面的管理也是需要加强的啊!

关于地图逻辑还是有点乱,尤其是库中的回调函数的调用,很多地方都有,太乱了。不过整体逻辑划分还算清晰。下面简单的画下结构图:

UI层通过CALayer将地图数据以Image形式画到View上,层次之间主要是进行地图数据Tile的传递和维护,包括缩放,定位,导航等内容。