请问这段递归代码如何执行的

walkingway 发布于 2014年01月29日 | 更新于 2014年01月29日
无人欣赏。
- (NSString *)objcioOverride_description
{    // call through to the original, really
       NSString *description = [self objcioOverride_description];
       NSString *objcioTag = objc_getAssociatedObject(self, 
           &ObjcioLayoutConstraintDebuggingShort);
       if (objcioTag == nil) {
           return description;
       }
       return [description stringByAppendingFormat:@" %@", objcioTag];
 }

请教下这段代码第一句 NSString *description = [self objcioOverride_description]; 又调用了自己方法,这个递归如何运行,有人给讲讲的吗? 完整的code在这里 link text

明白了,少看一段 看漏了一个方法

共5条回复
yingkong1987 回复于 2014年01月29日

能运行?为什么不是调用super objcioOverride_description

walkingway 回复于 2014年01月29日

1楼 @yingkong1987 所以看不懂啊,objc.io的http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html 这篇文章关于对布局debug部分,code在这里https://github.com/objcio/issue-3-auto-layout-debugging

nekoP 回复于 2014年01月29日

其实就是把每层的objcioTag连成一个串。。

walkingway 回复于 2014年01月29日

3楼 @nekoP 明白了 我少看一段。。。漏了这个方法。。。

MethodSwizzle(self, @selector(description), @selector(objcioOverride_description));
sumtec 回复于 2014年01月29日

看样子很可能是笔误以及实际上可能根本没有调用。参考objcioOverrideaddConstraint 及 objcioOverrideaddConstraints,应该是要将原来的selector指向objcioOverridexxx函数体,而将objcioOverridexxx选择器指向原始函数体。

完全没有搞过Objective-C的硬读结论,错了不要拍砖。


update: 我也没看到后面调用了 MethodSwizzle(self, @selector(description), @selector(objcioOverride_description)); …… 感觉好坑。

登录 或者 注册