我一直在閱讀自動合成的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