罗朝辉(飘飘白云)

关注嵌入式操作系统,移动平台,图形开发。-->加微博 ^_^

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  85 随笔 :: 0 文章 :: 169 评论 :: 0 Trackbacks

Cocoa 开发

Mac, iPhone/iPad开发相关的东东
     摘要: KVO 并不是什么新事物,换汤不换药,它只是观察者模式在 Objective C 中的一种运用,这是 KVO 的指导思想所在。其他语言实现中也有“KVO”,如 WPF 中的 binding。而在 Objective C 中又是通过强大的 runtime 来实现自动键值观察的。本文对 KVO 的使用以及注意事项,内部实现都详细介绍了一番,对 KVO 的理解又深入一层了。Objective 中的 KVO 虽然可以用,但却非完美,有兴趣的了解朋友请查看《KVO 的缺陷》 以及改良实现 MAKVONotificationCenter 。  阅读全文
posted @ 2012-11-17 17:41 罗朝辉 阅读(21771) | 评论 (4)  编辑

     摘要: 如果我们在 Objective C 中向一个对象发送它无法处理的消息,会出现什么情况呢?根据前文《深入浅出Cocoa之消息》的介绍,我们知道发送消息是通过 objc_send(id, SEL, ...) 来实现的,它会首先在对象的类对象的 cache,method list 以及父类对象的 cache, method list 中依次查找 SEL 对应的 IMP;如果没有找到且实现了动态方法决议机制就会进行决议,如果没有实现动态方法决议机制或决议失败且实现了消息转发机制就会进入消息转发流程,否则程序 crash。也就是说如果同时提供了动态方法决议和消息转发,那么动态方法决议先于消息转发,只有当动态方法决议依然无法正确决议 selector 的实现,才会尝试进行消息转发。在前文中,我并没有详细讲解动态方法决议,因此本文将详细介绍之。  阅读全文
posted @ 2012-11-14 23:53 罗朝辉 阅读(2326) | 评论 (0)  编辑

     摘要: iOS 游戏开发教程资源,来自 http://www.raywenderlich.com  阅读全文
posted @ 2012-11-10 22:45 罗朝辉 阅读(1051) | 评论 (0)  编辑

     摘要: XCode 内置GDB,我们可以在命令行中使用 GDB 命令来调试我们的程序。下面将介绍一些常用的命令以及调试技巧。  阅读全文
posted @ 2012-01-31 16:19 罗朝辉 阅读(3242) | 评论 (0)  编辑

     摘要: 在前文中总结到“ObjC 为每个类的定义生成两个 objc_class ,一个即普通的 class,另一个即 metaclass。我们可以在运行期创建这两个 objc_class 数据结构,然后使用 objc_addClass 动态地创建新的类定义。”今天我们来如何在运行时动态创建类。下面这个函数就是应用前面讲到的Class,MetaClass的概念,在运行时动态创建一个类。  阅读全文
posted @ 2012-01-30 14:05 罗朝辉 阅读(4609) | 评论 (2)  编辑

     摘要: 最近打算写一些ObjC中比较底层的东西,尤其是 runtime 相关的。从哪里入手呢?那当然是最基本的类与对象。与C++相比,ObjC中的类与对象结构要简洁与一致得多(参考《深度探索C++对象模型》,你就知道C++中类与对象结构的复杂)。本文将详细讲解ObjC中类与对象的结构,下回将讲如何在 runtime 时操作类。

总结:ObjC 为每个类的定义生成两个 objc_class ,一个即普通的 class,另一个即 metaclass。我们可以在运行期创建这两个 objc_class 数据结构,然后使用 objc_addClass 动态地创建新的类定义。这个够动态够强大的吧?下回讲演示如何在运行期动态创建新类。  阅读全文
posted @ 2012-01-19 16:58 罗朝辉 阅读(4672) | 评论 (5)  编辑

     摘要: Three20 是 facebook 开源的一款功能齐全又强大的库,覆盖 UI,network,JSON/XML解析等。其 github 仓库在这里:https://github.com/facebook/three20 ,这个页面也有如何在工程中添加 three20 库的介绍,不过在 Lion 系统下以及 xcode 4.2 下有些许不同,英文好的同学可以参看原文。现整理如下:  阅读全文
posted @ 2011-12-31 17:45 罗朝辉 阅读(2759) | 评论 (0)  编辑

     摘要: 使用 OCMock 进行 unit test 时,我们无法使用 stub 或 expect 测试类方法,那么又该怎样测试类方法呢?
下面是一个解决办法:在测试类中的非类方法 wrap 一下类方法,然后测试 wrap 方法。  阅读全文
posted @ 2011-12-27 14:34 罗朝辉 阅读(2247) | 评论 (0)  编辑

     摘要: XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在 XCode 4.2 下使用 OCUnit, GHUnit 和 OCMock 进行 iOS 单元测试。  阅读全文
posted @ 2011-12-23 14:12 罗朝辉 阅读(2966) | 评论 (1)  编辑

     摘要: 花了几天时间,在 iPad 上做了一个简陋的 Dicom Viewer,这个查看器没有使用 DCMTK 库(虽然可用,但太庞大,造造轮子亦有乐趣),而是自己移植了一个 Dicom 文件解析器(Thanks to Amarnath S and his great post.)。该Dicom 文件解析器以及开源,源代码在这里 or https://github.com/kesalin/DicomViewer。
先来看看效果图:  阅读全文
posted @ 2011-11-18 06:51 罗朝辉 阅读(9522) | 评论 (0)  编辑

     摘要: DCMTK是德国 Offis 公司开发的实现 DICOM 协议的跨平台开源 C++库,在医学领域里是很有名的,它支持Windows ,Linux,Mac OS,SUN等平台。不过貌似在 iOS 平台上编译 DCMTK 的文档很少很少,折腾了好久终于编译成功了,记录下来。  阅读全文
posted @ 2011-11-10 12:59 罗朝辉 阅读(9150) | 评论 (13)  编辑

     摘要: 前文已经说了如何配置服务器,下面来演示如何创建一个新仓库,然后与 XCode 结合。  阅读全文
posted @ 2011-11-08 17:54 罗朝辉 阅读(8592) | 评论 (0)  编辑

     摘要: XCode 默认支持 Git 作为代码仓库,当我们新建一个仓库的时候,可以勾选创建默认仓库,只不过这个仓库是在本地的。本文介绍如何在 mac 机器上创建 Git 服务器,总体思路是:使用 gitosis 来简化创建过程,在用作服务器的机器上创建一个名为 git 的账户来创建 git 服务器,其他客户端通过 ssh 机制访问 git 服务器。  阅读全文
posted @ 2011-11-07 16:09 罗朝辉 阅读(9740) | 评论 (2)  编辑

     摘要: [译]苹果 Cocoa 编码规范中文版
官方文档:Coding Guidelines for Cocoa
本文档下载:点击这里  阅读全文
posted @ 2011-11-03 16:02 罗朝辉 阅读(5466) | 评论 (1)  编辑

     摘要: Objective C 的类方法(class method),即 static 方法,是用 + 修饰的方法。类方法是属于类对象的,所以无需创建类的实例对象我们就可以直接使用它们。使用形式为:
[ClassName classMethod];
在这里 ClassName 代表的就是一个类对象,而不是作为一种类型。类名只有出现在接收消息的表达式中才代表一个类对象,其他情况下都表示一种类型。  阅读全文
posted @ 2011-11-01 17:14 罗朝辉 阅读(2773) | 评论 (2)  编辑

Full Cocoa 开发 Archive