我一直在阅读自动合成的伊娃。我的问题是,“它们是自动分配的吗?”我本来希望它们是self的一部分,所以我可以在调试器中看到它们,但似乎我能看到它们的唯一方法是调用accessor方法(通过gdb'po'命令)。类/对象的结构中是否没有空格(就像显式声明的ivar一样)?
(是否有现代Objective-C对象的内存中表示的描述?)
作为一个C家伙,不能看到一切都在哪里让我感到非常不舒服。 :-P
答案 0 :(得分:1)
看起来这会告诉你: How do automatic @synthesized ivars affect the *real* sizeof(MyClass)?
我也是心中的C家伙。为什么要使用这些自动生成的?我喜欢看一个类,看看它在数据方面的含义。
有趣的是:他们如何采取64位改变以使事情变得更好。 http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html
答案 1 :(得分:1)
它们被添加到objective-c对象(这是一个C结构),与常规的ivar没有什么不同,例如:
@interface TestObject : NSObject {
}
@property (nonatomic, assign) int theInt;
@end
@implementation QuartzTestView
@synthesize theInt;
@end
您可以直接(不是通过属性访问者)引用theInt
ivar:
- (void)someMethod {
theInt = 5;
}
或强>
- (void)someOtherMethod {
self->theInt = 10;
}
答案 2 :(得分:0)
参见http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html - 使用现代运行时,将为您合成一个实例变量“。尽管你自己添加一个变量可能会很好(因此你可以在自我调试时看到它),但是你必须小心不要为保留或基于复制的属性直接赋值给实例变量。