罗朝辉(飘飘白云)

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

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

#

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

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

     摘要: 在前一篇《[深入理解C++(一)]类型转换(Type Casting)》中,我详细讲述了 C++ 中转型动作,以及使用规则。有网友说应该提及下《深度探索 C++ 对象模型》一书中的内容,其实他的意思是,要是对 C++ 对象的内存布局不甚了解,就想要彻悟C++中的类型转型,对象切割,虚函数调用等,犹如脱离了坚实的根基,想去建空中阁楼。理解 C++ 对象的内存布局对学会 C++来说至关重要,但我不打算写 C++ 对象的内存布局相关的文章,因为要站在前人的肩膀上,大牛陈皓 已经就这个主题写了三篇图文并茂的文章:
(一),C++ 虚函数表解析
(二),C++ 对象的内存布局(上)
(三),C++ 对象的内存布局(下)

在继续阅读本文之前,建议先阅读这三篇文章,以更好地理解本系列文章。在接下来的内容中,我将从重载,重写,屏蔽等概念入手,引入众多接口继承规则。  阅读全文
posted @ 2012-11-06 21:21 罗朝辉 阅读(2897) | 评论 (5)编辑 收藏

     摘要: 类型转换就是将给定类型的表达式转换为另一种类型。C++中的转型可分为两种:隐式类型转换和显式类型转换。下面将详细介绍这两种转型操作,以及各自的适用场景,潜在问题,最终将总结使用类型转换操作应牢记的原则。  阅读全文
posted @ 2012-10-28 21:44 罗朝辉 阅读(6610) | 评论 (2)编辑 收藏

     摘要: 当 timeout = 0, 即 Sleep(0),如果线程调度器的可运行队列中有大于或等于当前线程优先级的就绪线程存在,操作系统会将当前线程从处理器上移除,调度其他优先级高的就绪线程运行;如果可运行队列中的没有就绪线程或所有就绪线程的优先级均低于当前线程优先级,那么当前线程会继续执行,就像没有调用 Sleep(0)一样。

当 timeout > 0 时,如:Sleep(1),会引发线程上下文切换:调用线程会从线程调度器的可运行队列中被移除一段时间,这个时间段约等于 timeout 所指定的时间长度。为什么说约等于呢?是因为睡眠时间单位为毫秒,这与系统的时间精度有关。通常情况下,系统的时间精度为 10 ms,那么指定任意少于 10 ms但大于 0 ms 的睡眠时间,均会向上求值为 10 ms。  阅读全文
posted @ 2012-10-11 20:04 罗朝辉 阅读(6152) | 评论 (2)编辑 收藏

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

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

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

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

     摘要: 在前文深入浅出Cocoa之消息中,我简要介绍了ObjC 中消息的基本情况,包括SEL查找,缓存以及消息转发等。在本文中,我要介绍一个很有趣的技术,Method swizzling,通过这个手法,我们可以动态修改方法的实现,从而达到修改类行为的目的。当然,还有其他办法(如 ClassPosing,Category)也可以达到这个目的。ClassPosing 是针对类级别的,是重量级的手法,Category 也差不多,比较重量级,此外 Category 还无法避免下面的递归死循环(如果你的代码出现了如下形式的递归调用,应该考虑一下你的设计,而不是使用在这里介绍的 Method Swizzling 手法,:))。  阅读全文
posted @ 2012-01-05 17:02 罗朝辉 阅读(2321) | 评论 (4)编辑 收藏

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

列出全部内容
共9页: 1 2 3 4 5 6 7 8 9