Blokları kullanmaya başladım ve karşılaştığım ilk şeylerden biri, kapanışta yakalanan değerleri ayarlamakta yetersiz kalıyor. Bu iyi, uzun bir süre C/C++ kullanıyorum. Sadece işaretçileri kullanacağım!Bloklardaki değerleri değiştirmek için işaretçiler kullanmak güvenli midir?
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;
Sorum şu, bu güvenli mi? İşaretçim kapsam dışı bırakılan ve hala var olan bir şeye işaret ettiğinde, bunun işe yarayacağını varsayalım. Ama aynı zamanda blokları ele geçiren şeylerin, bunları paralel olarak yürütmediklerini varsayıyorum. kodunun kodunun olmadığını biliyorum, ancak NSArray enumerateObjectsUsingBlock çağrısıyla bir blok kullanmayı bilmiyorum.
Ahh! Var olduğunu bilmiyordum. Mükemmel! Çok teşekkürler. –