我是Objective-c 2.0的新手(来自.NET c#),我发现了属性。 它们非常便于处理内存管理(保留)。
所以我可以在init方法中设置vars就像
一样@property (retain) NSDate *d1, *d2;
和
@synthesize d1, d2;
-(id)init {
if (self = [super init]) {
// initialize Properties
self.d1 = [NSDate date];
self.d2 = [NSDate date];
}
return self;
}
有时我会忘记(可能是因为我的.NET背景)使用'self'。它看起来很熟悉,而且不像编码错误。所以我将来可能会再次错过它......
-(id)init {
if (self = [super init]) {
// initialize Properties
d1 = [NSDate date];
d2 = [NSDate date];
}
return self;
}
但是,当使用self.d1 = [NSDate date];
或从objXy.d1 = [NSDate date];
外部
我很感激,当编译器会警告我直接使用属性而不是通过合成消息。这可以通过命名实例var而不是属性来轻松完成。
只是想知道,如果有人这样做,或在另一个......? 我的研究表明,这是可能的,但我需要在头文件中自己声明变量。为此,我会使用一个前缀(_是为CF保留的)所以我需要更大的东西,比如XY_ ......嗯...不是真的很方便...
为什么没有像属性那样的属性(唯一)会生成一个名称与属性名称不同的实例var ... @apple
答案 0 :(得分:1)
这是可能的,非常简单!使用@synthesize时,请执行以下操作:
@synthesize propertyName=_ivarName;
这将创建一个名为_ivarName的ivar,就像在头文件中声明它一样。
答案 1 :(得分:0)
你有一个好主意,但是如果你想使用名称与属性名称不同的ivar,你需要自己声明变量。