首页 > 解决方案 > 记录一个objective-c指针以及它是弱还是强

问题描述

我正在调试,如果我可以记录一个指针以及它是弱还是强,这将非常有帮助,比如

NSLog( @"Pointer is %p and weak %@", p, [p isWeak] ? @"YES" : @"NO" );

这可能吗?

指针指向一个块,但这与问题并不真正相关,尽管它与我要修复的错误有关。

标签: objective-c

解决方案


好的,我偶然发现了这个我认为可行的方法,尽管它只适用于 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" );

}


推荐阅读