在現代的Objective-C運行時,你可以做這樣的事情:什麼時候你不想使用@synthesized實例變量?
@interface MyClass : NSObject {
}
@property NSString *stringProperty;
@end
@implementation MyClass
@synthesize stringProperty;
@end
這是我的理解與現代的運行,這將不僅合成的訪問者爲我的財產,而且該實例變量本身,所以我可以在這個類的方法[stringProperty length];
之一中說,它會像我聲明一個實例變量一樣工作。
我已經開始在我的所有代碼中使用它了,因爲它是我不得不一遍又一遍地重複寫的東西。我聽說過使用clang 2.0編譯器,我甚至可以跳過@synthesize
(但這是另一回事)。但我一直在想,做這件事有什麼缺點?什麼時候可以真正需要一個實例變量以及我的屬性?
我知道有時候我想保留一個變量private並且不允許在外部訪問它(但是我通常只是在我的私有類擴展中聲明該屬性,或者我不爲它創建屬性所有,如果我不需要訪問器)。
有沒有什麼時候我不想這樣做?
@joe是的,如果我要聲明屬性並如上所述合成它,但我沒有明確地聲明自己的ivar,編譯器仍然會實際創建ivar。所以我可以在類中做'int len = [self.stringProperty length]`,而且我也可以`int len = [stringProperty length]`,而不使用accessor方法,直接使用ivar(編譯器爲我合成的,以及setter + getter)。這真的太棒了! – jbrennan 2010-12-08 19:34:43
@joe我從檢查存根XCode4現在爲應用程序委託生成了解這一點。 – 2011-04-11 21:39:00