2009-05-27 12 views
9

मैं उद्देश्य-सी और कोको में नया हूं। मैंने पढ़ा है कि सरल पूर्णांक के साथ काम करते समय एनएसआईएनटेगर और एनएसएनंबर को प्राथमिकता दी जाती है क्योंकि वे आदिम संख्यात्मक प्रकारों (और एनएस नम्बर के मामले में, किसी ऑब्जेक्ट में लिपटे) के "प्लेटफार्म-सुरक्षित" संस्करण हैं। इसलिए, मुझे अपनी कक्षा में एक काउंटर की आवश्यकता है जो एनएसटीमर आग लगने पर बढ़ जाती है। एक ऐप्पल फोरम पर मैंने सभी लोगों को एक समान स्थिति में किसी को सलाह देने वाले लोगों का एक समूह पाया कि उन्हें हेडर में एनएसएनंबर पॉइंटर घोषित करना चाहिए, इसे संख्या के साथ शुरू करें, और फिर प्रत्येक बार इसे बढ़ाने के लिए इसे करने के लिए इसे करने की आवश्यकता होती है एक नई वस्तु (counter = [NSNumber numberWithInt:[counter intValue]+1]; की तरह कुछ)। यह मुझे ज्यादा पसंद है। अगर मुझे केवल एक इंट काउंटर चाहिए (और बीटीडब्ल्यू, मैं 15 को हिट करने के बाद इसे 0 पर रीसेट कर रहा हूं इसलिए आकार कोई मुद्दा नहीं है), क्या मैं सिर्फ एक इंट का उपयोग करने से दूर नहीं हो सकता और उसे आवंटित नहीं करना पड़ता मेरे टाइमर के लूप के प्रत्येक पुनरावृत्ति के साथ नई वस्तु?क्या एनएसएनंबर एक उदाहरण-स्तर काउंटर के लिए ओवरकिल है?

और यदि हां, तो मैं अपनी कक्षा में एक आदिम प्रकार कैसे उपलब्ध करूं। मुझे पता है कि ऑब्जेक्ट प्रकारों के साथ, मैं इसे अपने इंटरफ़ेस में घोषित करता हूं और @property और @synthesize का उपयोग करता हूं ... primitives के साथ काम करते समय समतुल्य (यदि कोई मौजूद है) का उपयोग करता है?

+0

अपने दूसरे प्रश्न के लिए: यह वही है, बस @property और @synthesize का उपयोग करें। –

उत्तर

15

एक साधारण काउंटर के लिए एनएसएनंबर का उपयोग करने से थोड़ा अधिक मार डाला जाता है। आप NSInteger के रूप में वर्ग के सदस्यों की घोषणा और बस उन्हें का उपयोग कर ++ या अपडेट कर सकते हैं + =

उदाहरण के लिए

:

@interface YourViewController : UIViewController { 
NSInteger counter;  
} 

@property (nonatomic,assign) NSInteger counter; 

@synthesize बस है:

@synthesize counter 

और या तो द्वारा वृद्धि की जा सकती है :

self.counter += 1; 

या

+०१२३५१६४१०
counter ++; 

बाद में किसी भी पर्यवेक्षकों को सूचित होने से रोका जाएगा, इस प्रकार बेहतर नहीं हो सकता है।

+0

मुझे नहीं पता था कि + = गुणों पर काम किया ... @gs के लिए धन्यवाद –

9

एनएसएनंबर एक संख्या का ऑब्जेक्ट प्रतिनिधित्व है। संग्रह संग्रह में संख्याओं को संग्रहीत करते समय मैं इसका उपयोग करता हूं क्योंकि वे केवल ऑब्जेक्ट पॉइंटर्स धारण कर सकते हैं।

तो आपके उदाहरण में, जो काउंटर की आवश्यकता है, शायद यह अधिक है।

एनएसआईएनटेगर बस एक पूर्णांक है जिसे 32 और 64 बिट प्रोग्राम के लिए सुरक्षित रखने के लिए टाइप किया गया है, और int के बजाय ऐप्पल द्वारा उपयोग के लिए अनुशंसा की जाती है। यह एक वस्तु नहीं है। यह शायद आपको काउंटर के लिए आवश्यक है (वास्तव में NSUInteger, जो unsigned int है) बेहतर हो सकता है।

अपनी कक्षा में प्राइमेटिव उपलब्ध कराने के लिए - ठीक है, अगर आप इसे iVar के रूप में शीर्षलेख में घोषित करते हैं, तो यह आपके पूरे वर्ग में उपलब्ध है। @property और @synthesize केवल उन उद्देश्यों के रूप में घोषित करने के उद्देश्य-सी 2.0 तरीके हैं जिन्हें आपकी कक्षा के बाहर केवीसी/केवीओ अनुपालन में देखा जा सकता है (और शायद बदला जा सकता है)। आदिम प्रकारों को उसी @property और @synthesize सिंटैक्स का उपयोग करके गुणों के रूप में उपयोग किया जा सकता है।

4

मैं NSInteger का उपयोग (int नहीं, अधिक पोर्टेबल होने के लिए), और एक NSNumber में लपेट अगर मैं इसे (जब आवेदन छोड़ने पर राज्य की बचत इस तरह के एक NSMutableDictionary के रूप में) एक संग्रह में जोड़ने की जरूरत है।

1

मैं आपकी सहजता से सहमत हूं, एक साधारण काउंटर ध्वनियों के लिए ऑब्जेक्ट का उपयोग करके ओवरकिल की तरह और एक काउंटर को बढ़ाने के लिए संदेश प्रेषण कॉल की एक अनावश्यक संख्या जोड़ देगा। एक ऐसे काउंटर के लिए जिसे किसी संग्रह में संग्रहीत करने की आवश्यकता नहीं है या किसी वस्तु के रूप में छेड़छाड़ की आवश्यकता नहीं है, सी स्केलर प्रकारों के साथ चिपके रहें।

अपनी कक्षा का एक उदाहरण चर के रूप में एक अदिश की घोषणा करने के लिए, बस अपने हेडर फाइल में यह घोषणा:

@interface MyClass: NSObject{ 
    int counter; 
} 

@end 
0

आप एक NSNumber (जैसे कि एक NSManagedObject संपत्ति के लिए के रूप में) को बढ़ाने के लिए जरूरत करना अगर मैं इस श्रेणी पाया मदद की:

counter = [counter increment]; 
:

@interface NSNumber (Incrementer) 
- (NSNumber *)increment; 
@end 

@implementation NSNumber (Incrementer) 
- (NSNumber *)increment { 
    return [NSNumber numberWithInt:[self intValue]+1]; 
} 
@end 

तो आप करने के लिए वेतन वृद्धि बयान सरल बना सकते हैं

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