2011-07-16 6 views
6

मैंने ब्लॉक का उपयोग करना शुरू कर दिया है, और पहली चीजों में से एक जो मैंने सामना किया है वह बंद करने के लिए मूल्यों को सेट करने में असमर्थता है। यह ठीक है, मैं लंबे समय से सी/सी ++ का उपयोग कर रहा हूं। मैं सिर्फ पॉइंटर्स का उपयोग करूंगा!क्या ब्लॉक में मान बदलने के लिए पॉइंटर्स का उपयोग करना सुरक्षित है?

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; 

मेरा सवाल है, क्या यह सुरक्षित है? मुझे लगता है कि जब तक मेरा सूचक कुछ ऐसा इंगित करता है जो गुंजाइश से बाहर नहीं गया है और यह अभी भी मौजूद है, तो उसे काम करना चाहिए। लेकिन मैं यह भी मान रहा हूं कि जो चीजें ब्लॉक लेती हैं, वे कभी भी समानांतर में नहीं चलती हैं। मुझे पता है मेरा कोड नहीं है, लेकिन मुझे एक एनएसएआरएआर एन्यूमेरेट ऑब्जेक्ट्स यूजिंगब्लॉक कॉल के साथ एक ब्लॉक का उपयोग करने के बारे में नहीं पता है।

उत्तर

13

'सही' तरीका यह है परिवर्तनशील ब्लॉक के रूप में उन मूल चर चिह्नित करने के लिए हो सकता है, __block

+0

आह! पता नहीं था कि अस्तित्व में था। उत्तम! बहुत बहुत धन्यवाद। –

संबंधित मुद्दे