- (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
明白了,少看一段 看漏了一个方法
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 明白了 我少看一段。。。漏了这个方法。。。
MethodSwizzle(self, @selector(description), @selector(objcioOverride_description));
看样子很可能是笔误以及实际上可能根本没有调用。参考objcioOverrideaddConstraint 及 objcioOverrideaddConstraints,应该是要将原来的selector指向objcioOverridexxx函数体,而将objcioOverridexxx选择器指向原始函数体。
完全没有搞过Objective-C的硬读结论,错了不要拍砖。
update: 我也没看到后面调用了 MethodSwizzle(self, @selector(description), @selector(objcioOverride_description)); …… 感觉好坑。