命名属性与实例var不同?

时间:2011-02-24 13:32:15

标签: objective-c

我是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];外部

设置属性时,这会导致EXC_BAD_ACCESS违规

我很感激,当编译器会警告我直接使用属性而不是通过合成消息。这可以通过命名实例var而不是属性来轻松完成。

只是想知道,如果有人这样做,或在另一个......? 我的研究表明,这是可能的,但我需要在头文件中自己声明变量。为此,我会使用一个前缀(_是为CF保留的)所以我需要更大的东西,比如XY_ ......嗯...不是真的很方便...

为什么没有像属性那样的属性(唯一)会生成一个名称与属性名称不同的实例var ... @apple

2 个答案:

答案 0 :(得分:1)

这是可能的,非常简单!使用@synthesize时,请执行以下操作:

@synthesize propertyName=_ivarName;

这将创建一个名为_ivarName的ivar,就像在头文件中声明它一样。

答案 1 :(得分:0)

你有一个好主意,但是如果你想使用名称与属性名称不同的ivar,你需要自己声明变量。