7

NSComparisonResult और NSComparator क्या है?एनएससीओम्परिसन रीसेट और एनएससीओम्परेटर - वे क्या हैं?

मैं प्रकार परिभाषाएं में से एक को देखा है, कुछ है कि जैसे:

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 

यह एक समारोह सूचक से किसी भी अलग है?

इसके अलावा, मैं यह भी अनुमान नहीं लगा सकता कि ^ प्रतीक का अर्थ क्या है।

उत्तर

22

^ एक ब्लॉक प्रकार, एक फ़ंक्शन पॉइंटर के अवधारणा के समान ही दर्शाता है।

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 
//  ^     ^   ^
// return type of block  type name  arguments 

इसका मतलब यह है कि प्रकार NSComparator एक ब्लॉक उस प्रकार idobj1 और obj2 कहा जाता है की दो वस्तुओं में ले जाता है, और एक NSComparisonResult देता है।

विशेष रूप से NSComparatorFoundation Data Types reference में परिभाषित किया गया है।

और सी ब्लॉक के बारे में और जानने के लिए, इस एडीसी आलेख को देखें Blocks Programming Topics

उदाहरण:

NSComparator compareStuff = ^(id obj1, id obj2) { 
    return NSOrderedSame; 
}; 

NSComparisonResult compResult = compareStuff(someObject, someOtherObject); 
+0

धन्यवाद बहुत, जैकब! अब मुझे ब्लॉक पर ट्यूटोरियल मिले हैं और थोड़ा और सीखा है) – wh1t3cat1k

7

याकूब का जवाब अच्छा है, लेकिन भाग जवाब देने के लिए के बारे में "कैसे एक समारोह सूचक की तुलना में इस प्रकार भिन्न है?":

1) एक ब्लॉक नहीं एक समारोह है सूचक। ब्लॉक सी/सी ++/उद्देश्य-सी में प्रथम श्रेणी के नागरिकों को कैसे कार्य करने के लिए ऐप्पल का लेते हैं। यह आईओएस 4.0 के लिए नया है।

2) इस अजीब अवधारणा को क्यों पेश करें? प्रथम श्रेणी के कार्यों को बदलता है कुछ परिदृश्यों में उपयोगी होता है, उदाहरण के लिए ग्रैंड सेंट्रल डिस्पैच में समानांतर में निष्पादित किए जा सकने वाले कार्यों के प्रबंधन का हिस्सा। जीसीडी से परे, सिद्धांत इतना महत्वपूर्ण है कि इसके आसपास स्थित संपूर्ण सॉफ्टवेयर सिस्टम हैं। लिस्प पहले में से एक था।

3) आप इस अवधारणा को कई अन्य भाषाओं में देखेंगे, लेकिन विभिन्न नामों से। उदाहरण के लिए माइक्रोसॉफ्ट .Net में लैम्ब्डा और प्रतिनिधि हैं (उद्देश्य-सी प्रतिनिधियों से कोई संबंध नहीं), जबकि सबसे सामान्य नाम शायद अज्ञात कार्य हैं या first class functions हैं।

-1
NSComparisonResult comparisionresult; 
NSString * alphabet1; 
NSString * alphabet2; 


// Case 1 

alphabet1 = @"a"; 
alphabet2 = @"A"; 
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2]; 

if (comparisionresult == NSOrderedSame) 
    NSLog(@"a and a are same. And the NSComparisionResult Value is %ld \n\n", comparisionresult); 
//Result: a and a are same. And the NSComparisionResult Value is 0 

// Case 2 
alphabet1 = @"a"; 
alphabet2 = @"B"; 
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2]; 

if (comparisionresult == NSOrderedAscending) 
    NSLog(@"a is greater than b. And the NSComparisionResult Value is %ld \n\n", comparisionresult); 
//Result: a is greater than b. And the NSComparisionResult Value is -1 

// Case 3 
alphabet1 = @"B"; 
alphabet2 = @"a"; 
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2]; 

if (comparisionresult == NSOrderedDescending) 
    NSLog(@"b is less than a. And the NSComparisionResult Value is %ld", comparisionresult); 

//Result: b is less than a. And the NSComparisionResult Value is 1 
संबंधित मुद्दे