更新日志
第1章 熟悉 Objective-C
第1条 了解 Objective-C 语言的起源
Objective-C 为C语言添加了面向对象特性,是其超集。Objective-C 使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。
理解C语言的核心概念有助于写好Objective-C程序。尤其要掌握内存模型与指针。
第2条 在类的头文件中尽量少引入其他头文件
除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
有时无法使用向前声明,比如要声
继续阅读 »
更新日志
Method Swizzle(方法调配、方法混合、方法调和、方法混写) 是 Objective-C 运行时的黑魔法之一。我们可以通过 Swizzle 的手段,在运行时对某些方法的实现进行替换,这是 Objective-C 甚至说 Cocoa 开发中最为华丽,同时也是最为危险的技巧之一。Swizzle 使用了 Objective-C 的动态派发,对于 NSObject 的子类是可以直接使用的。
通过此方案,可以为那些『完全不知道其具体实现的』黑盒方法增加日志记录功能,这非常有助于程序调试。然而,次做法只在调试程序时有用。很少有人在调试程序之外的场合用上述『Method Swillze』来永久改动某个类的功能。不能仅仅因为
继续阅读 »
Objective-C是一门简单的语言,95%是C语言。只是在语言层面上加了些关键字和语法。真正让Objective-C如此强大的是它的运行时。它很小但却很强大。它的核心是消息分发。
runtime是开源的。可以去下载:http://opensource.apple.com/tarballs/objc4/objc4-437.1.tar.gz。
runtime是由C语言实现的。
runtime的两个版本。
继续阅读 »
本文主题是如何动态获取实例属性的值。
Objective-C运行时库已经有这样的功能。使用这些方法需要加头文件。
```
import
```
要用到的方法是:
objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)
继续阅读 »
我们可以在Objective-C运行时将一个类中的一个方法,动态的替换为该类中的另一个方法。并且在替换后的方法中,依然可以调用以前的方法。
```
import
void MethodSwizzle(Class aClass, SEL orig_sel, SEL alt_sel)
{
Method orig_method = nil, alt_method = nil;
// First, look for the methods
orig_method = class_getInstanceMethod(aClass, orig_sel);
alt_method = class_getInstanceMet
继续阅读 »
更新日志
分析工具:clang
```
clang -rewrite-objc test.m
// UIKit
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxxxx.m
```
block 的数据结构定义
对应的结构体定义如下:
```
struct Block_descriptor {
unsigned long int reserved
继续阅读 »
说明
类别名可以随便取。
类别是一个类,它是添加了新功能的现有类。
使用类别就是为了能够为现有类添加新的方法,不用继承该现有类,就可使用现有类的对象调用添加的方法了。
类别可以使类的实现分散在多个文件中。
类别中不能有变量,类别中没有放变量的位置。
如果类中的方法和类别中的方法名称相同,这将造成冲突,类别的方法将完全取代类的方法。
同一个类的不同类别声明了相同的方法,这将导致不稳定,哪个方法会被调用是不确定的。
不建议在类别中覆盖类中的方法,因为在类别中的方法不能调用superClass的方法(因为没有元数据支持)。
类别方法不能覆盖于同一个类的其它类别中的方法。因为无法预知他们的加载优先顺序,就可能在编译时出错。
对类库的类别方
继续阅读 »
注意
本文转载自http://nshipster.cn/clang-diagnostics/
概要
诊断结合了逻辑与分析来得出一个结论。这是最纯粹的科学和工程学,也是人类最有力的推理。
more
在医学界,诊断是通过实验室样本做后盾的本能来判断。而对于工业制造,则是通过在统计和方向都等同应用来诊断产品故障。
对于我们开发者来说,我们通过代码通知后续代码的生产,创建了一个在过去半个世纪里呈几何级数发展的技术的正反馈循环。尤其对于我们的 Objective-C 开发者来说,最有效的诊断来自 Clang。
Clang 是 C / Objective-C 的前端的 LLVM 编译器。它对 Objective-C 的语义和语法有
继续阅读 »
更新日志
程序员要提高自己的编程能力,有两个捷径:一、多写代码不断做个人项目;二、多看多学习别人的代码,看代码要比写代码难很多倍。
more
Objective-C
开源中国
项目地址
继续阅读 »
Cycript:Objective-JavaScript,它懂Objective-C,也懂JavaScript。
我们能够借助Cycript使用Objective-C或者JavaScript,给某个正在运行的进程的Runtime发送消息。
继续阅读 »