我创建了一个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;
}
}
}