0

코어 데이터의 각 정렬 된 객체에 대한 값을 업데이트해야하며 현재 루프를 사용하고 있습니다. 하지만 다음 코드가 스레드로부터 안전한지 여부를 알고 싶습니다. 이유. 스레드로부터 안전하지 않습니다은 코어 데이터의 관리 객체를 동시에 스레드 안전성으로 나열합니다

ManagedObjectContext는,이 블록의 여러 복사본을 동시에 실행할 수 있지만, 그들은 모두 서로 다른 개체에 노력하고 있다는 점에서 안전있어 here

[myArrayController.arrangedObjects enumerateObjectsWithOptions:NSEnumerationConcurrent 
                usingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

    // do some work 

    [obj setValue:@"some value" forKey:@"aKey"];    
}] 

답변

0

설명했다. setValue:forKey:에 대한 호출이 컬렉션의 다른 개체에 부작용이 없다고 가정합니다.

안전하지 않은 다른 스레드 또는 큐가이 컬렉션의 개체에 액세스하려고 시도하면 같은 개체를 동시에 사용하는 것을 막을 수 없습니다. 이 블록은 다른 장소에서 다른 작업을 잠그지 않으므로 다른 장소에서 동시에 다른 장소에서 작업하는 경우 더 많은 예방 조치가 필요합니다.