假設我有性能當一個屬性是隻讀的,複製和非原子是無意義的?
@property (readonly) NSString* p1;
@property (readonly, copy) NSString* p2;
@property (readonly, nonatomic) NSString* p3;
他們之間有什麼區別嗎?
我認爲沒有區別,因爲「複製」和「非原子」將不起作用,因爲setter方法不存在。
假設我有性能當一個屬性是隻讀的,複製和非原子是無意義的?
@property (readonly) NSString* p1;
@property (readonly, copy) NSString* p2;
@property (readonly, nonatomic) NSString* p3;
他們之間有什麼區別嗎?
我認爲沒有區別,因爲「複製」和「非原子」將不起作用,因爲setter方法不存在。
是的,他們是不同的,因爲制定者可以使用類別來添加。
順便說一句,你的should always指定copy
爲NSString屬性。
存在差異,它會影響生成的吸氣劑的行爲。
事情是這樣的:
@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;
}
你怎麼知道setter不存在?我經常有不導出到頭文件的setter。而「複製」意味着你可以確定你的字符串不可變。 – gnasher729
@ gnasher729你是對的。我沒有意識到setter可以添加到標題之外,例如使用一個類別。 –