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

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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值