Я разрабатываю приложение iOS с последним SDK.Двойной @синхронизированный: он нужен?
Мое приложение является портом из Android приложения и у меня есть эти два метода:
- (MyObject*)getMyObject:(MyObjectType)myObjectType
{
@synchronized(self)
{
for (int index = 0; index < [myObjects count]; index++)
{
MyObject* myObject = (MyObject*)[myObjects objectAtIndex:index];
if (myObject.Type == myObjectType)
return myObject;
}
return nil;
}
}
- (BOOL)isMyObjectVisible:(MyObjectType)myObjectType
{
@synchronized(self)
{
return ([self getMyObject:myObjectType] != nil);
}
}
Я имею isMyObjectVisible:
, то есть @synchronized
, вызов другой @synchronized
метод.
Необходимо, чтобы isMyObjectVisible:
должен был быть @synchronized
?
Возможно, вы это делаете ** Просто для обеспечения безопасности потоков **. Просим прочитать [@synchronized and threadSafety] (http://stackoverflow.com/questions/15392726/does-synchronized-guarantees-for-thread-safe-or-not) –
Вы пробовали? Это похоже на немедленный тупик для меня ... – borrrden
@borrrden, замок в этом случае является * рекурсивным *, поэтому он не затормозит программу. Это просто лишний и немного расточительный. – Nate