test.h@synthesize in Objective-c?
NSString *name;
@property(nonatomic,retain) NSString *name;
test.m
@synthesize name;
這裏爲什麼要用非原子,爲什麼我們使用保留產權,.m文件 @synthesize?
請回答,
test.h@synthesize in Objective-c?
NSString *name;
@property(nonatomic,retain) NSString *name;
test.m
@synthesize name;
這裏爲什麼要用非原子,爲什麼我們使用保留產權,.m文件 @synthesize?
請回答,
的nonatomic
意味着設置該屬性是不是線程安全的,retain
意味着新的值會被保留(和舊的價值釋放),以及@synthesize
實際創建所必需的屬性的方法。在這種情況下,它評估如下:
- (NSString *)name {
// Method "name", returning content of variable "name".
return name;
}
- (void)setName:(NSString *)newName {
[newName retain];
[name release];
name = newName;
// Also some magic for KVO is added here.
}
非原子詳細here描述。
保留意味着,當值被設置爲大於零的任何其他屬性被保留。還有其他選項,如複製和分配。通常,可複製的對象類型應使用複製,如NSString
。 賦值只需設置指針值。
@synthesize存根出來的getter和setter方法的屬性,並以訂單所需非原子和保留工作。
此外,確保,如果你使用保留或副本,你也發佈在dealloc
方法的對象。
- (void)dealloc {
[name release];
[super dealloc];
}
'nonatomic'與線程安全無關。它只是意味着你將永遠在線程環境中獲得可行的價值。不保證是否正確(即原子性不是交易系統)。 – bbum 2010-11-03 06:23:06
好帖子,但是當你不需要時,爲什麼你要「複製」對象?特別是如果你使用不可變的對象(如NSString),複製只會浪費內存。到目前爲止,我很少發現需要「複製」。 – DarkDust 2010-11-03 06:26:31
@DarkDust:每個NSMutableString都是一個有效的NSString。你不想意外地存儲其中的一個,並讓它在你的下面改變。大多數實現至少拷貝*的對象可能是可變的。因此,以這種方式聲明所有屬性是個好主意。而且,作爲優化,NSString(不可變版本)只會在您將其複製時保留下來。 – Chuck 2010-11-03 06:33:29
您的標題與您的問題不符。 – DarkDust 2010-11-03 06:18:53