请问这段递归代码如何执行的
walkingway
由 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
2楼
·
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
3楼
·
nekoP
回复于 2014年01月29日
其实就是把每层的objcioTag连成一个串。。
4楼
·
walkingway
回复于 2014年01月29日
3楼 @nekoP 明白了 我少看一段。。。漏了这个方法。。。
MethodSwizzle(self, @selector(description), @selector(objcioOverride_description));
5楼
·
sumtec
回复于 2014年01月29日
看样子很可能是笔误以及实际上可能根本没有调用。参考objcioOverrideaddConstraint 及 objcioOverrideaddConstraints,应该是要将原来的selector指向objcioOverridexxx函数体,而将objcioOverridexxx选择器指向原始函数体。
完全没有搞过Objective-C的硬读结论,错了不要拍砖。
update: 我也没看到后面调用了 MethodSwizzle(self, @selector(description), @selector(objcioOverride_description)); ...... 感觉好坑。