3
顯然,覆蓋原子屬性訪問器時不可能使用@synthesize。 Xcode 4 will produce a warning.有沒有辦法做一個原子屬性的懶惰初始化,而無需手動編寫setter和getter?
現在,有利用原子性質的延遲初始化的另一種方式,同時還讓Xcode的合成getter和setter方法自動完成,無需覆蓋任何人?
顯然,覆蓋原子屬性訪問器時不可能使用@synthesize。 Xcode 4 will produce a warning.有沒有辦法做一個原子屬性的懶惰初始化,而無需手動編寫setter和getter?
現在,有利用原子性質的延遲初始化的另一種方式,同時還讓Xcode的合成getter和setter方法自動完成,無需覆蓋任何人?
你需要做的是編寫setter和getter。您仍然可以使用@synthesize
來獲取存儲空間。例如: -
//.h
@property (strong) id x;
//.m
@synthesize x = _x;
- (id)x
{
@synchronized(self)
{
if (!_x)
{
_x = [[MyX alloc] init];
}
return _x;
}
}
- (void)setX:(id)x
{
@synchronized(self)
{
_x = x;
}
}
你可能需要做更多的內存管理不ARC和可能希望創建一個不同的鎖(而不是self
),或者使用不同的同步方法,但它會給你的要點。
爲什麼建議創建一個不同的鎖而不是自己?重點是什麼? – dontWatchMyProfile
如果你有x和y都鎖定自己,你不能同時訪問它們。在很多情況下,你可能不需要有一個不同的鎖,但是如果你在許多線程之間共享和對象並且擁有很多屬性,那麼這可能會提高性能。只有在你做了一些測試並且對性能不滿意並且測試突出它作爲一個瓶頸的情況下才做到這一點...... – hypercrypt