我一直在阅读自动合成的ivars。我的问题是,“是否自动分配?”我希望他们能够成为自我的一部分,以便我可以在调试器中看到他们,但似乎我能看到他们的唯一方法是调用访问器方法(通过gdb'po'命令)。在类/对象的结构中没有空格(就像显式声明的伊娃)?合成的ivars存储在哪里?
(有没有在内存中表示为一个现代化的Objective-C对象的描述?)
为C的人,这让我非常不舒服不能够看到一切。 :-P
我一直在阅读自动合成的ivars。我的问题是,“是否自动分配?”我希望他们能够成为自我的一部分,以便我可以在调试器中看到他们,但似乎我能看到他们的唯一方法是调用访问器方法(通过gdb'po'命令)。在类/对象的结构中没有空格(就像显式声明的伊娃)?合成的ivars存储在哪里?
(有没有在内存中表示为一个现代化的Objective-C对象的描述?)
为C的人,这让我非常不舒服不能够看到一切。 :-P
看起来这会告诉你: 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
它们被添加到目标c对象(其是C结构)没有不同,以有规律的ivar,因此,例如:
@interface TestObject : NSObject {
}
@property (nonatomic, assign) int theInt;
@end
@implementation QuartzTestView
@synthesize theInt;
@end
可以直接参考theInt
的ivar(不通过属性访问器)或者:
- (void)someMethod {
theInt = 5;
}
OR
- (void)someOtherMethod {
self->theInt = 10;
}
你说,“没有不同于普通的伊娃”,但是常规的Ivars在调试器中出现,没有明确声明的那些不会显示出来。 – wrlee 2011-06-16 09:03:31
@wrlee,他们确实是这样做的,并且按照你合成它们的顺序。查看[this](https://picasaweb.google.com/lh/photo/xmeQ0hYCt7SAL1DNFXRhfzhx437tMWI6RAv8g-2VuS0?feat=directlink)屏幕截图,并注意'self'在观察窗口中展开。 – 2011-06-27 18:41:03
请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html - 使用现代运行时,实例变量“将为您合成”。尽管可以自己添加一个变量(这样您可以在自我调试时看到它),但是您必须小心,不要直接分配实例变量以保留或复制基于的属性。
限制仍然是真的,你不能在模拟器上使用动态ivars?如果这样的话,他们在iPhone上。另外为OS X开发意味着32位二进制文件,所以在现实生活中,我无法在其中看到它们。 – 2011-05-22 18:43:41
我相信你现在可以在模拟器中使用它们,但我不确定。 – Wevah 2011-05-22 20:25:29
模拟器的运行时间和设备运行时间相同。 – bbum 2011-05-22 23:27:27