2011-02-24 24 views
0

我是新來的Objective-C 2.0(來自.NET C#),我發現了屬性。 它們對於處理內存管理(保留)非常方便。命名屬性不同於它們的實例var?

所以我可以設置在init方法的增值經銷商很容易像

@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背景)使用「自「。它看起來很熟悉,並不像真正的糟糕編碼。所以我可能會錯過它再次未來......

-(id)init { 
    if (self = [super init]) { 
     // initialize Properties 
     d1 = [NSDate date]; 
     d2 = [NSDate date]; 
    }    
return self; 
} 

但是,這將導致EXC_BAD_ACCESS侵犯時,酒店將使用self.d1 = [NSDate date];或從外部objXy.d1 = [NSDate date];

我將不勝感激,當設置編譯器會警告我直接使用屬性而不是通過合成的消息。這可以通過命名不同於屬性的實例var來輕鬆完成。

想知道,如果有人這樣做,或在另一個...? 我的研究表明,這是可能的,但我需要在頭文件中自行聲明變量。爲此,我會使用一個前綴(_是爲CF保留的),所以我需要一些更大的像XY_ ... hm ...並非真的那麼得心應手......

爲什麼不具有屬性的屬性就像(唯一的),它將生成一個實例var,其名稱與屬性名稱不同... @apple

回答

1

這是可能的,很容易!當您使用@synthesize做到這一點:

@synthesize propertyName=_ivarName; 

此,如果你在你的頭文件中聲明,將創建一個名爲_ivarName伊娃。

0

你有一個好主意,但此刻如果你想使用你需要聲明變量名稱與物業名稱不同的伊娃。

相關問題