合成的ivars存储在哪里?

时间:2011-05-22 18:22:54

标签: objective-c ios properties xcode4

我一直在阅读自动合成的伊娃。我的问题是,“它们是自动分配的吗?”我本来希望它们是self的一部分,所以我可以在调试器中看到它们,但似乎我能看到它们的唯一方法是调用accessor方法(通过gdb'po'命令)。类/对象的结构中是否没有空格(就像显式声明的ivar一样)?

(是否有现代Objective-C对象的内存中表示的描述?)

作为一个C家伙,不能看到一切都在哪里让我感到非常不舒服。 :-P

3 个答案:

答案 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 - 使用现代运行时,将为您合成一个实例变量“。尽管你自己添加一个变量可能会很好(因此你可以在自我调试时看到它),但是你必须小心不要为保留或基于复制的属性直接赋值给实例变量。