摘要:
使用隐藏的参数当objc_msgSend找到方法对应的实现时,它将直接调用该方法实现,并将消息中所有的参数都传递给方法实现,同时,它还将传递两个隐藏的参数:接收消息的对象方法选标这些参数帮助方法实现获得了消息表达式的信息。它们被认为是”隐藏“的是因为它们并没有在定义方法的源代码中声明,而是在代码编译时是插入方法的实现中的。尽管这些参数没有被显示声明,但在源代码中仍然可以引用它们(就象可以引用消息接收者对象的实例变量一样)。在方法中可以通过self来引用消息接收者对象,通过选标_cmd来引用方法本身。在下面的例子中,_cmd指的是strange方法,self指的收到strange消息的对象。- 阅读全文
posted @ 2012-06-14 10:41
Tekkaman
阅读(592)
评论(0)
推荐(0)
摘要:
objc_msgSend函数关于Selector,什么 是Selector,Selector就是一个字符串,用来表示一个方法。在Objective-C中,消息是直到运行的时候才和方法实现绑定的。编译器会把一个消息表达式,[receiver message]转换成一个对消息函数objc_msgSend的调用。该函数有两个主要参数:消息接收者和消息对应的方法名字——也就是方法选标:objc_msgSend(receiver, selector)同时接收消息中的任意数目的参数:objc_msgSend(receiver, selector, arg1, arg2, ...)该消息函数做了动态绑定所需 阅读全文
posted @ 2012-06-14 10:38
Tekkaman
阅读(5325)
评论(0)
推荐(0)
摘要:
【发送消息 vs 调用函数】 在Objective-C中,发送消息最终会被转化为函数调用,避免动态绑定的唯一办法就是取得方法的地址,并且直接象函数调用一样调用它。当一个方法会被连续调用很多次,而且您希望节省每次调用方法都要发送消息的开销时,使用方法地址来调用方法就显得很有效。 利用NSObject类中的methodForSelector:方法,您可以获得一个指向方法实现的指针,并可以使用该指针直接调用方法实现。methodForSelector:返回的指针和赋值的变量类型必须完全一致,包括方法的参数类型和返回值类型都在类型识别的考虑范围中。下面的例子展示了怎么使用指针来调用setFill... 阅读全文
posted @ 2012-06-14 10:26
Tekkaman
阅读(1304)
评论(0)
推荐(0)
摘要:
核心理念Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。早期版本和现行版本Objective-C运行时系统有两个已知版本:早期版本和现行版本。现行版本主要是Objective-C 2.0及与其相关的新特性。在现行版本中,最显著的新特性就是实例变量是"健壮“(non-fragile)的:在早期版本中,如果您改变类中实例变量的布局,您必须重新编译该类的所有子类。在现行版本中,如果您改变类中实例变量的布局,您无需重新编译该类的任何子类。此外,现行版本支持声明property的变量的统一声明。平台iPhone程序和Mac OS X v10.5及以后的系统中的64位程序使用 阅读全文
posted @ 2012-06-14 10:20
Tekkaman
阅读(1178)
评论(0)
推荐(1)
浙公网安备 33010602011771号