我創建了一個NSObject,僅用於鎖定。 我的問題是,在我的dealloc中,我如何釋放鎖(從內存中)。我讀過,你不應該修改同步內的鎖對象。但是在我的場景中,我認爲從dealloc中的@synchronized完成之後到[_lockObject release]被調用的時間之間,另一個線程中的另一個方法可能會獲取_lockObject。因此,如果在_lockObject被保存的情況下調用[_lockObject release],可能會發生不好的事情。什麼是正確的方式來釋放鎖在objective-c
在我的dealloc方法中處理鎖的正確方法是什麼?
-(id)initWithImageFileName:(NSString*)imageFileName
{
if (self = [super init])
{
_imageFileName = [imageFileName retain];
_loadBackgroundCalled = NO;
_deallocing = NO;
_lockObject = [[NSObject alloc]init];
}
return self;
}
-(void)dealloc
{
_deallocing = YES;
@synchronized(_lockObject)
{
..... <releases some stuff>
}
[_lockObject release];
_lockObject = nil;
[_imageFileName release];
_imageFileName = nil;
[super dealloc];
}
-(void)loadBackground
{
@synchronized(_lockObject)
{
if (!_deallocing)
{
if (!_loadBackgroundCalled)
{
_loadBackgroundCalled = YES;
....
}
}
}
}
-(void)loadSprite:(XYTexture*)texture
{
@synchronized(_lockObject)
{
....
}
}
-(void)unloadBackground
{
@synchronized(_lockObject)
{
if (!_deallocing)
{
.....
_loadBackgroundCalled = NO;
}
}
}