给定以下打包结构:
typedef struct __attribute__((packed)) {
BOOL flag;
int x;
} Foo;
以及以下课程:
@interface Obj : NSObject
@property (nonatomic) Foo foo;
@end
@implementation Obj
@end
尝试调用valueForKey:
具有打包结构类型的属性:
Obj *obj = [Obj new];
id boo = [obj valueForKey:@"foo"];
导致内部崩溃valueForKey:
(实际上它不是在内部valueForKey:
而是在随机位置崩溃,具体取决于月球大小,我猜这是内存损坏)。
如果我删除__attribute__((packed))
它工作正常。有没有可能在不崩溃的情况下获取结构的数据?是苹果的bug吗?
PS。我确实需要在运行时这样做,即我不能直接调用.foo
,我在运行时只有@"foo"
字符串。(我实际上想要实现的是递归打印对象内容)。