2012-09-21 12 views
5

ओबीजे-सी ब्लॉक कुछ ऐसा है जो मैं हाल ही में पहली बार उपयोग कर रहा हूं।उद्देश्य-सी ब्लॉक सिंटेक्स

हेडर फाइल में:

@property (nonatomic, copy) void (^completionBlock)(id obj, NSError *err); 

मुख्य फ़ाइल में:

-(void)something{ 

id rootObject = nil; 

// do something so rootObject is hopefully not nil 

    if([self completionBlock]) 
     [self completionBlock](rootObject, nil); // What is this syntax referred to as? 
} 

मैं सहायता की सराहना मैं निम्नलिखित ब्लॉक वाक्य रचना समझने की कोशिश कर रहा हूँ!

+0

आईएमओ, यदि आप डॉट सिंटैक्स का उपयोग करते हैं तो यह और स्पष्ट हो जाता है कि क्या हो रहा है। 'अगर (self.completionBLock) self.completionBlock (rootObject, nil);' – zpasternack

उत्तर

2

इसका एक ब्लॉक संपत्ति है, तो आप एक ब्लॉक रनटाइम पर सेट कर सकते हैं।

यहाँ,

स्थापित करने के लिए वर्ग के भीतर ताकि आप कोड निम्नलिखित

self.completionBlock = ^(id aID, NSError *err){ 
    //do something here using id aID and NSError err 
}; 

निम्नलिखित कोड आप विधि/ब्लॉक सेट कॉल कर सकते हैं के साथ द्वारा एक विधि सेट कर सकते हैं यह शून्य प्रकार है के रूप में वाक्य रचना है पहले से।

if([self completionBlock])//only a check to see if you have set it or not 
{ 
     [self completionBlock](aID, nil);//calling 
} 
+0

बहुत बहुत धन्यवाद! – JaredH

5

ब्लॉक ऑब्जेक्ट्स हैं।

अपने मामले विधि यदि ब्लॉक नहीं के बराबर नहीं है और फिर आप इसे दो आवश्यक तर्क गुजर बुला रहे हैं आप जाँच कर रहे हैं अंदर में ...

ध्यान रखें कि ब्लॉक एक ही तरीके से कहा जाता है एसी समारोह है ...

नीचे मैं दो में बयान विभाजित किया है बेहतर समझने में जाने के लिए:

[self completionBlock] //The property getter is called to retrieve the block object 
    (rootObject, nil); //The two required arguments are passed to the block object calling it 
+0

स्पष्टीकरण के लिए धन्यवाद! – JaredH

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