6
블록을 사용하기 시작했고, 내가 만난 첫 번째 문제 중 하나는 클로저에 의해 캡처 된 값을 설정할 수 없다는 것입니다. 이것은 괜찮습니다. 저는 오랫동안 C/C++를 사용해 왔습니다. 포인터 만 사용하겠습니다!포인터를 사용하여 블록의 값을 변경하는 것이 안전합니까?
MyObject* bestObj = nil;
float bestDist= 10000.f;
MyObject **pBestObj = &bestObj;
float* pBestDist = &bestDist;
[self testObjects:class block:^(MyObject* obj){
CGRect r = [obj boundingBox];
// position is captured from outside this code sample
if(CGRectContainsPoint(r, position))
{
float dist = GetDistance(obj, position);
if(dist < bestDist)
{
*pBestDist = dist;
*pBestObj = obj;
}
}
}];
return bestObj;
내 질문은 안전한가요? 나는 나의 포인터가 범위를 벗어나지 않고 여전히 존재하는 것을 가리키는 한 그것이 작동해야한다고 생각한다. 그러나 블록을 사용하는 것들이 병렬로 실행되지 않는다고 가정합니다. 나는 내 코드가 아니라는 것을 알고 있지만 NSArray enumerateObjectsUsingBlock 호출을 사용하여 블록을 사용하는 것에 대해서는 모른다.
아! 그 존재를 몰랐습니다. 완전한! 고마워. –