2011-10-16 46 views

回答

6

你需要做的是編寫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),或者使用不同的同步方法,但它會給你的要點。

+0

爲什麼建議創建一個不同的鎖而不是自己?重點是什麼? – dontWatchMyProfile

+0

如果你有x和y都鎖定自己,你不能同時訪問它們。在很多情況下,你可能不需要有一個不同的鎖,但是如果你在許多線程之間共享和對象並且擁有很多屬性,那麼這可能會提高性能。只有在你做了一些測試並且對性能不滿意並且測試突出它作爲一個瓶頸的情況下才做到這一點...... – hypercrypt

相關問題