objective-c - 记录一个objective-c指针以及它是弱还是强
问题描述
我正在调试,如果我可以记录一个指针以及它是弱还是强,这将非常有帮助,比如
NSLog( @"Pointer is %p and weak %@", p, [p isWeak] ? @"YES" : @"NO" );
这可能吗?
指针指向一个块,但这与问题并不真正相关,尽管它与我要修复的错误有关。
解决方案
好的,我偶然发现了这个我认为可行的方法,尽管它只适用于 Objective-C 属性。
该property_getAttributes
函数返回一个 (C) 字符串,该字符串可以检查多个“标志”,例如表示它是弱引用的W。它需要一些解析,但至少看起来很容易实现。
所以就复制和粘贴代码而言,这个怎么样......重新修改手动示例以打印出“弱点”。
id LenderClass = objc_getClass("Lender");
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(LenderClass, &outCount);
for (i = 0; i < outCount; i++) {
objc_property_t property = properties[i];
char * attr = property_getAttributes(property);
fprintf(stdout, "%s %s (weak %s)\n", property_getName(property), attr, strstr( attr, ",W" ) ? "YES" : "NO" );
}
推荐阅读
- c++ - 对无符号变量进行算术运算会产生有符号值,这是标准行为吗?
- python - 如何从 .csv 文件导入一组 .obj 文件,然后将它们移动、缩放和旋转到位?
- primefaces - 当时过滤排序,Primefaces Datatable报错
- swift - 以编程方式关闭大写锁定
- kendo-ui - 窗口中的简单 Kendo DropDownList 绑定
- google-apps-script - 每次运行脚本时如何增加脚本中引用的单元格?
- python - NameError:写入文件时未定义名称“write”
- java - 不支持的事件循环组类型:使用 pgjdbc-ng 的 NioEventLoopGroup
- templates - 在 Marketo 中更改模板后如何有效更新所有登陆页面?
- ruby-on-rails - 有没有办法防止每次实例化模型时都触发漂亮的打印宝石?