2010-02-23 11 views
18

उद्देश्य-सी में, मेरे पास कोड का एक साधारण ब्लॉक है जो प्रत्येक बार बटन दबाए जाने पर काउंटर को बढ़ाता है। मेरे लॉग, और इंटरफ़ेस के अपडेट भी, एक के बजाय 4 की वृद्धि दिखा रहे हैं। क्या यह सिर्फ मेरे स्वरूपण के साथ एक प्रदर्शन समस्या है (मैं% d का उपयोग कर रहा हूं) या कुछ और जो मुझे याद आ रही है? मेरा अनुमान "% d" के साथ है लेकिन मैं उद्देश्य-सी के लिए नया हूं और सुनिश्चित नहीं हूं। । (ध्यान दें, मैं भी करने की कोशिश की "काउंटर + = 1;" एक ही परिणाम के साथउद्देश्य-सी में, यह 1 के बजाय 4 की वृद्धि क्यों करता है?

int counterValue = 0; 
NSLog(@"Count at init: %d",counterValue); 
... 

-(IBAction)pushButton { 
    NSLog(@"Count (Pre-Push) = %d",counterValue); 
    counterValue++; 
    NSLog(@"Count (Post-Push) = %d",counterValue); 
} 

उत्पादन इस प्रकार है:

2010-02-20 18:39:39.125 My App[37536:207] Count at init: 0 
2010-02-20 18:39:39.845 My App[37536:207] Count (Pre-Push) = 0 
2010-02-20 18:39:39.846 My App[37536:207] Count (Post-Push) = 4 
2010-02-20 18:39:40.165 My App[37536:207] Count (Pre-Push) = 4 
2010-02-20 18:39:40.166 My App[37536:207] Count (Post-Push) = 8 
2010-02-20 18:39:40.727 My App[37536:207] Count (Pre-Push) = 8 
2010-02-20 18:39:40.728 My App[37536:207] Count (Post-Push) = 12 
+1

एक नाइट: कार्य विधियां '- (आईबीएक्शन) क्या होनी चाहिए: (आईडी) प्रेषक ', भले ही आप' प्रेषक 'तर्क का उपयोग नहीं कर रहे हों। – Wevah

+5

@Wevah: वास्तव में नहीं। जबकि एक-तर्क फ़ॉर्म सबसे लोकप्रिय है, ये सभी विधि हस्ताक्षर कार्य विधियों के लिए समान रूप से मान्य हैं: (1) '- (शून्य) क्रिया', (2)' - (शून्य) क्रिया: (आईडी) प्रेषक', (3) '- (शून्य) कार्रवाई: (आईडी) प्रेषक forEvent: (UIEvent *) घटना'। स्रोत: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 –

+0

आह, आप सही हैं । जाहिर है, एक और UIKit/AppKit अंतर। (आपको सही होने के लिए संशोधित किया गया है;)) – Wevah

उत्तर

43

कोड आपको नहीं करना चाहिए कि यकीन है कि दिखा रहे हैं । मैं doublecheck के लिए त्वरित कार्यक्रम बनाया है, और मैं उम्मीद परिणाम प्राप्त:

2010-02-22 17:04:35.787 app[68267:a0f] Count (Pre-Push) = 0 
2010-02-22 17:04:35.790 app[68267:a0f] Count (Post-Push) = 1 
2010-02-22 17:04:35.923 app[68267:a0f] Count (Pre-Push) = 1 
2010-02-22 17:04:35.924 app[68267:a0f] Count (Post-Push) = 2 

मेरे सबसे अच्छा अनुमान है कि आप प्रकार int * का एक और चर, जो 01,232 बना रही है साथ counterValue छाया हैकी वृद्धि sizeof(int) की वृद्धि के बजाय 1.

+0

मेरी .h फ़ाइल में मैं "int * counterValue" घोषित कर रहा हूं; - क्या यह समस्या है? – jbnunn

+0

@jnunn, हां। यह तुम्हारी समस्या है। यदि आप 'int' प्रकार का चर चाहते हैं, तो पॉइंटर घोषित न करें। –

+0

जो इसे ठीक करता है - सटीक मानसिक डिबगिंग के लिए धन्यवाद कार्ल – jbnunn

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