मैंने कुछ सप्ताह पहले एक समान प्रश्न का उत्तर दिया था। इस प्रश्न के लिए संपादित नीचे दिए गए उत्तर।
सामान्य रूप से, मैं इस तरह के काम के लिए NSInvocation
से बचता हूं। यह एक रखरखाव सिरदर्द होता है और, विशेष रूप से, भविष्य में refactoring में कठिनाई पैदा करता है।
सबसे पहले, इस विधि दिया:
-(void)plotPoly:(Polygon *)aPoly color:(UIColor *)aColor filled:(BOOL)filledFlag;
यह नामकरण सम्मेलनों में थोड़ा और अधिक बारीकी से इस प्रकार है:
-(void)plotPoly:(Polygon *)poly WithColor:(UIColor *)color AndFill:(BOOL)filled;
यह आम तौर पर के रूप में घोषित किया जाएगा।
अब, मैं वास्तव में एक साधारण वर्ग में तर्कों को कैप्चर करता हूं जो -invoke
विधि प्रदान करता है। इस तरह की एक इंटरफेस के साथ
कुछ:
PolyPlotter.h:
@interface PolyPlotter : NSObject
{
Polygon *poly;
UIColor *color;
BOOL filled;
}
+ plotterWithPoly: (Polygon *) aPoly color: (UIColor *) aColor filled: (BOOL) filledFlag;
- (void) plot;
@end
PolyPlotter.m:
@interface PolyPlotter()
@property Polygon *poly;
@property UIColor *color;
@property BOOL filled;
@end
@implementation PolyPlotter
@synthesize poly, color, filled;
+ plotterWithPoly: (Polygon *) aPoly color: (UIColor *) aColor filled: (BOOL) filledFlag;
{
PolyPlotter *polygonPlotter = [PolyPlotter new];
polygonPlotter.poly = aPoly;
polygonPlotter.color = aColor;
polygonPlotter.filled = filledFlag;
return [polygonPlotter autorelease];
}
- (void) plot;
{
// ... do your plotting here ...
}
@end
प्रयोग सरल है। बस पॉलीगॉनप्लॉटर का एक उदाहरण बनाएं और देरी के बाद या मुख्य धागे या जो भी हो, चयनकर्ता plot
निष्पादित करने के लिए कहें।
प्रश्न को देखते हुए, मुझे संदेह है कि ड्राइंग के समय आपको थोड़ा अधिक संदर्भ की आवश्यकता हो सकती है? यदि हां, तो आप से, कहते हैं -plot
लिए एक तर्क के रूप कि जानकारी दे सकते हैं, के रूप में विधि की घोषणा:
- (void) plot: (UIView *) aViewToPlotIn;
या ऐसा ही कुछ।
जैसा कि मैंने कहा, थोड़ा और कोड, लेकिन एनएसआईएनवोकेशन पैटर्न की तुलना में अधिक लचीला और प्रतिक्रियाशील। उदाहरण के लिए, आप आसानी से पॉलीगॉनप्लटर कुछ ऐसा कर सकते हैं जिसे संग्रहीत किया जा सकता है।
क्या हमें यूआईसीओएलर से लगता है कि आप आईफोन पर हैं? – nall
मैं हूं। क्या इससे कुछ अन्तर पड़ता है? – willc2
हां - यदि आप हिम तेंदुए पर थे, तो आप इसे हल करने के लिए ब्लॉक का उपयोग कर सकते हैं। – bbum