Global Assert
摘要:【Global Assert】 通常Assert函数被用于函数内部,这些assert会在运行时起检察状态作用。但是如何把Assert运用在编译期呢?objc4项目提供了一种方法。 即通过设置数组长度为-1的方法来达到编译期Assert作用。
阅读全文
objc之method&class attributes
摘要:【objc之method&class attributes】 Objective-C now supports some gcc attributes for Objective-C methods. Syntactically, attributes for a method follow the method's declaration, and attributes for a method parameter sit between the parameter type and the parameter name. Supported attributes inclu
阅读全文
objc runtime之association
摘要:【objc runtime之association】 1、objc runtime association函数有3个,功能是给某个instance添加额外的key-value。 2、在objc runtime的实现中,采用monostate模式实现了一具全局association表,用于记录每一个对象所对应的key-value表。 3、AssociationManager中存留着disguise(obj_ptr) -> AssociationHashMap,此map记录着此obj_ptr所有的key->value。参考: 4、在3中可以看到,给某Class的instance添加as
阅读全文
objc新老runtime接口类型对比
摘要:【objc新老runtime接口类型对比】 1、objc_class->class_t. objc_class,此类型仍有,在OBJC2中,此类型的保留只是为了与OBJC1兼容。 上图看到,在OBJC2中,objc_class只有一个成员变量,isa。此变量存在的意义只是为了与OBJC1兼容。 class接口类型在OBJC2中变成了class_t,在runtime处理时,将objc_class*(即Class)强转成class_t*。 2、objc_method -> method_t。 && objc_method_list -> method_lsit_t
阅读全文
build objc4 runtime
摘要:【build objc4 runtime】 1、Get the latest objc4 project codes from www.opensource.apple.com. 2、Open the projetct, compile it, you will get compile error. 3、you need some file to complete the compilation. 1) Create Directory: /tmp/objc.dst/usr/include 2) from libauto project, get auto_zone.h. Put it i..
阅读全文
OC之respondsToSelector
摘要:【OC之respondsToSelector】 1、instancesRespondToSelector是类方法,用于判断此类实例是否能处理某个方法(包括基类方法)。 2、respondsToSelector是实例方法也是类方法,用于判断某个类/实例是否能处理某个方法(包括基类方法)。 3、下面是objc-runtime源码,可以看到这3个方法最终都调用class_respondsToSelector来实现功能,而class_respondsToSelector从父类中去寻找是否有对应的方法。 2个respondsToSelector方法类似,均是先取出isa指针,然后在isa指向的...
阅读全文
OC之new
摘要:【OC之new】 1、OC提供了alloc和new两个类方法,new方法实质上等于 [[xxx alloc] init]。 alloc方法会自动将分配内存设置为0。
阅读全文
OC之OBJC2_UNAVAILABLE
摘要:【OC之OBJC2_UNAVAILABLE】 1、What isOBJC2_UNAVAILABLE macro mean? 意即在OBJC2.0中,这些东西将被删除。
阅读全文
OC之initialize
摘要:【OC之initialize】 1、+ (void)initialize方法在调用每个类的第一个方法前(类方法,意味着以+打头的方法),会调用此函数。So,如果BaseClass继承了DerivedClass,那么initialize会被调用2次。 更详细资料参考:http://www.cocoachina.com/macdev/objc/2009/0611/158.html# 2、如何实现initialize方法:由于initialize会被多次调用,在执行initialize时,如果想只为本类初始化,则需要使用[self class]进行类型判定。
阅读全文
js's for-in vs oc's for-in
摘要:【js's for-in vs oc's for-in】 1、在OC中,for-in中的item代表array中的元素本身,即obj。例如: 2、在js中,for-in中的item代表key。即array[key] = value。所以js中使用for-in枚举的话,可能会产生意响不到值。例如: 对于JS,建议使用for(;;)来枚举array。
阅读全文
OC之class与meta-class
摘要:【OC之class与meta-class】 核心规则:类的实例对象的 isa 指向该类;该类的 isa 指向该类的 metaclass。 通俗说法:成员方法记录在class method-list中,类方法记录在meta-class中。即instance-object的信息在class-object中,而class-object的信息在meta-class中。 图示: class 是 instance object 的类类型。当我们向实例对象发送消息(实例方法)时,我们在该实例对象的 class 结构的 methodlists 中去查找响应的函数,如果没找到匹配的响应函数则在该 c...
阅读全文
为什么要在预编译头中加__OBJC__?
摘要:【为什么要在预编译头中加__OBJC__?】 因为在一个OC工程中,可能包含.m、.mm、.c、.cpp四类编译文件,这四类文件均会引用.pch预编译头。在编译.c、.cpp时,因为语法不兼容OC,所以预编译头中不能包含objc代码。 But因为.pch是2类源文件共用的,所以在pch中,oc头文件要用__OBJC__包含起来。如下:
阅读全文
Objective-C新特性
摘要:【Objective-C新特性】一、Literals and Boxing 对于上图的写法已过时,现在起应该采用下图的写法替换: 二、Collection Subscripting上图的代码可以简写成:新的脚本形式的方法可以避免下面这样的潜在问题:另外需要注意脚本化形式生成的容器都是immutable,需要使用mutableCopy方法返回mutable实例:三、Automatic Property Synthesissynthesize再也不用写了,LLVM会帮我们自动生成。有人说OC是门古老的语言,我想说过去版个本的OC可以被认为古老,但一门持续改进不断优化的现代OC显然不古老,一样长.
阅读全文
Objective-C之多语言的预编译头
摘要:【Objective-C之多语言的预编译头】 iOS工程可以包含.c、.cpp、.m、.mm四种文件,分别对应四种编译规则。那么在项目中所指定的pch该用哪种方式编译呢?在苹果官方文档中找到了解释。 根据语言,分别产生不同的PCH2进制。所以在写iOS项目的pch时,要考虑到所写的头文件必须是四种语言都兼容的版本。一种显而易见的约束是,OC头文件只能包含在__OCJC_宏中,在此宏外,只能使用#include。参考源:http://www.apple.com.cn/developer/mac/library/documentation/DeveloperTools/Conceptua...
阅读全文
Objective-C#pragma mark
摘要:【Objective-C#pragma mark】链接:http://beike.iteye.com/blog/378916上文讲述非常详细,请参阅。
阅读全文
Objective-C 注意要点
摘要:【Objective-C注意要点】1、没有C++中的bool值,对应的类型为BOOL,聚会为YES、NO.2、定义@interface Car{int m_nWeight;int m_nSpeed;}@property int m_nWeight;@proprety (readonly) int m_nSpeed;// 名字关联@property int speed;@synthesize speed = m_nSpeed;@end3、实现@implementation Car@synthesize m_nWeight;@synthesize m_nSpeed;@end4、调用[self se
阅读全文