Posts tagged code

构建View时可能用到的代理函数调用顺序

很多时候,要记住iPhone试图加载的life-cycle对应的代理函数是有点头疼的,特别是用Interface Builder构建界面的情况下。这给如何找到最佳的位置来添加自定义的视图绘画/初始化/配置成为了一个对于新手来说的难题。我把目前用到的可能会override的方法总结在这张图里。注意两点 1. 这是我目前遇到的case的总结。我不100%确定适用于所有情况 2. 不是每个case都会用到这些方法的重载。我只是把它们放在了一张图里面而已

浅谈获得随机数的几种方法

很多朋友在编程的时候都会遇到要使用随机数的情况。怎样获得在一定范围内的随机数呢?

理解C中的序列点

这篇文章和浅谈获得随机数的几种方法是我07年初写的了。当时发在bokee那个网址上,本来早就遗弃那里了,今天一个网友发邮件问我上面的一个问题,我好奇得回去瞧瞧,这不看不知道,一看吓一跳,那里居然还保存着,bokee官方也没有删除,还有不少网友在上面留言,浏览量已经达到了28w多了……上帝,我放弃那里都已经一年多了……随手翻了翻,觉得有两个帖子可以贴过来作为入门文章,就转移过来了。

求证这个AVLTREE Delete

昨天晚上在写一段代码的时候,发现有上千个字符串要处理,查找,以前搞嵌入式编程,没有这么多数据要处理,一般遇到这种情况都是直接用简单的二叉树了事。现在这玩意对性能要求挺高,数据又多,怕普通查找树到最后容易不平衡,所以决定采用平衡树来做。

除了简单的链表队列查找树以外,大多数的数据结构都还给老师了…….没办法,赶鸭子上架,找了一本“数据结构与算法分析”的书,看了看上面的AVL树介绍。介绍倒是挺清楚的,不过天杀的居然只有insert的代码示例,但我这里关键是要delete的实现。于是乎,“拿来主义”的幻想就此破灭。一看时间,只有半个小时就要交code了,估摸着自己写了一个delete出来,只试了几种情况,也不知道是不是普遍性正确的,所以贴上来,如果有朋友稍微有耐心看完发现有错误,希望指出,呵呵。

一场辩论会:应用程序有无必要查询系统内存?

今天在Unix新闻组上看见一个帖子的讨论,破有感触。以前在编写应用程序的时候,有时候会面临一个比较头疼的问题:程序是否需要去获得有关系统当前可用内存的信息?通常,每一个观点都有正反两派,尤其是在网上的讨论,这个问题也不例外。 反对者说,“可用内存”这个概念实在太抽象,其实应用程序根本就没有必要去关心它,因为分配内存是操作系统的工作。赞成者说,有可能存在一些情况,应用程序需要合法地知道当前系统可用内存有多少。公说公有理,婆说婆有理,有些事清本来就是没有确定的答案的,因此我们也没有必要在这个问题上下一个明确的判断。不过具体针对这两种观点展开一些讨论,倒是有点意思。我以模拟辩论会的形式来一一讲出支持和反对的理由,希望各位能够适应这种方式^_^ 支持者: 感谢CCTV,感谢ChinaV,感谢Comp.Unix,感谢forwind让我有这个机会站在这个舞台上为大家陈述我的观点…….好了,切入正题,为什么我支持“允许查询”这个观点呢?,好,假定如果你是在编写一个专门用于报告可用系统资源的程序,例如Top……

获得随机数的方法探讨

很多朋友在编程的时候都会遇到要使用随机数的情况。怎样获得在一定范围内的随机数呢?如果是有特殊要求的随机数呢?下面是关于这个的详细探讨,

理解c中的序列点

让我们来看看下面的代码: int i=7; printf(“%d\n”, i++ * i++); 你认为会返回什么?56?no。正确答案是返回 49?很多人会问为什么?难道不该打印出56吗?在ccfaq中有非常详尽的解释,根本原因在于c中的序列点。

向数据文件读写结构

如果遇到向数据文件读写结构的问题,会让很多编程人员都非常头疼。一般来说,最简单,最常用,最清晰的办法是用 fwrite() 来写一个结构 fwrite(&somestruct, sizeof somestruct, 1, fp); 对 应的 fread() 调用可以再把它读回来。但是这样写出的文件却不能移植。为什么呢?我们知道,结构中,各个成员在内存中的存放并不是紧挨着的,而是可能有一些空位,这些空 位的目的是为了填充,保持结构中后面的域的对齐,大多数情况下,这是必须的。为了高效的访问,许多处理器喜欢 (或要求) 多字节对象 (例如,结构中任何大于 char 的类型)不能处于随意的内存地址,而必须是2或4或对象大小的倍数。 正是因为这该死的原因,让我们无法很好得移植这种文件,比如如果结构包含任何指针,则只有指针值会被写入文件,当它们再次读回来的时候,很可能已经失效。 最好的解决办法,就是写一对函数,用可移植(可能甚至是人可读)的方式按域读写结构。尽管开始可能工作量稍大。 那么,我们如何确定域在结构中的字节偏移呢?ANSI C 在 中定义了offsetof() 宏,用 offsetof(struct s, f) 可以计算出域 f 在结构 s 中的偏移量。如果出于某种原因,你需要自己实现这个功能,可以使用下边这样的代码: #define offsetof(type, f) ((size_t) \ ((char *)&((type *)0)->f – (char *)(type *)0)) 当然请注意,这段代码并不是100%可移植的。

对于向嵌入式编程的c++化提出一些建议

嵌入式编程基本上都是c的天下,事实上,如果你尝试一下使用c++的话,会发现能省很多事情,程序也更加清晰。但为什么很多人都觉得c++不适合嵌入式编程呢?答案很简单,你用的特性太多了。 其实,即使在对即时性要求非常严格的嵌入式系统中,c++也能很好的工作,只是一般来说最好限制以下特性: – 少进行动态内存分配(new,delete,malloc,free) – 不进行run time type information(RTTI) – 不允许使用虚函数 – 不允许模板编程 这样可以增加程序的健壮性和速度。那么c++能够给我们带来的好处是: – 能够使用引用来代替指针,这样大大增强程序的健壮性 – 用类的方法来保证对模块内部变量的保护,减少非常容易出错的令人恼火的外部申明 – 能用构造来确保合适的初始化模块 其实c++最主要的缺陷就是对内存的占用稍微有些大,这主要是因为c++环境的初始化更加复杂。但是如果按照以上的原则的话,基本上是没有什么执行时期消耗的,写出来的程序目的很明晰,健壮,比如你做硬件接口的话,比用纯c效果要好得多。 欢迎讨论。

学习LCD编程的起步

在发表之前首先声明,这篇文章是我大一时候写的,最早以“雷风”的名字发表在21ic的论坛中,现在不少人转贴根本不著名“转”,甚至自己还标一个“原创”,还有人写个“作者不详”,拜托大家转贴还是要有点专业精神好不好。 之所以产生写这个东西的想法,是因为趁着大一寒假这段时间看了看学习板的源程序,在看lcd的时候很不顺利,花了五个晚上才看完(白天偷懒了^_^!,毕竟在春节嘛)。联想起还有很多水平和我差不多甚至可能还低一点的菜鸟,就觉得有义务把五个晚上的学习心得写出来。 这个心得是针对学习板上的lcd 驱动芯片SSD181X系列写的,当然思想应该是相通的。其实是我没有用过其他系列lcd(众人呕吐ing……)。好了,接下来进入正题。

linux新手编程必读

假如,你是一个linux编程方面的初学者,那么,在开始这段神奇经历之前,你一定会对这篇文章所讲的一些方面非常感兴趣。特别当你以前是一个 windows环境下的程序员的话,那就必须改变一些编程方面的想法和思维,这样当你遇到完全不同的理念和思维方式的时候,才能将这种所谓的“文化”差异带来的影响降到最低。 针对程序员,特别是一些有经验的Windows程序员在论坛上所问的关于linux编程方面的常见问题,我的建议如下: