从替换objc类成员方法观察成员方法寻址

来源:互联网 发布:淘宝网怎么做推广 编辑:程序博客网 时间:2024/06/07 16:11

objc的动态特性真是很好玩

 

cocoadev上有一篇关于替换成员方法的文章,可以将一个成员方法替换成新的实现

原文

http://www.cocoadev.com/index.pl?MethodSwizzling

 

这里又观察到一个现象

在写新实现的时候,调用的方法名称是新的方法名称

 

@implementation Foo(specialfooBar)

// returns the login name of the current user plus some other junk- (NSString *)myfooBar{    return [[self myfooBar] stringByAppendingString:@", bigtime luser"];}@end
看起来就像一个死循环的递归.
在实现替换后,这个死循环消失了.
这说明什么呢?
编译的时候,没有计算myfooBar的地址.如果是编译时绑定的,那么myfooBar将继续指向自己.一直是个死循环.
这里有个文章更详细的介绍
http://cocoasamurai.blogspot.com/2010/01/understanding-objective-c-runtime.html

原创粉丝点击