2014-06-09 39 views
3

假設我有性能當一個屬性是隻讀的,複製和非原子是無意義的?

@property (readonly) NSString* p1; 
@property (readonly, copy) NSString* p2; 
@property (readonly, nonatomic) NSString* p3; 

他們之間有什麼區別嗎?

我認爲沒有區別,因爲「複製」和「非原子」將不起作用,因爲setter方法不存在。

+0

你怎麼知道setter不存在?我經常有不導出到頭文件的setter。而「複製」意味着你可以確定你的字符串不可變。 – gnasher729

+0

@ gnasher729你是對的。我沒有意識到setter可以添加到標題之外,例如使用一個類別。 –

回答

0

是的,他們是不同的,因爲制定者可以使用類別來添加。

順便說一句,你的should always指定copy爲NSString屬性。

1

存在差異,它會影響生成的吸氣劑的行爲。

事情是這樣的:

@property (readonly) NSString* p1; 

- (NSString *)p1 { 
    @synchronized(self) { 
     return _p1; 
    } 
} 

@property (readonly, copy) NSString* p2; 

- (NSString *)p2 { 
    @synchronized(self) { 
     return [_p2 copy]; 
    } 
} 

@property (readonly, nonatomic) NSString* p3 { 

- (NSString *)p3 { 
    return _p3; 
} 
+6

我不相信'copy'會影響getter,只是一個setter。獲取屬性值時不會調用'copy'。 – rmaddy

+0

@rmaddy是的,你可能是對的;我一直認爲它影響了二傳手和吸氣者,但我找不到任何支持這一假設的東西。 – trojanfoe

+1

如果你提供一個私人二傳手,那麼這個裝飾也必須匹配。 –

相關問題