2010-04-02 11 views
7

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

तब मैंने सोचा, क्यों क्लास गीत की बजाय उन सभी संपत्तियों के साथ एक स्ट्रक्चर गीत नहीं है। ऐसा करने से क्लास फाइलों को खत्म कर दिया जाएगा, #import सॉन्ग लाइन का उपयोग क्लास की .m फ़ाइल में, और आवंटन, init, रिलीज करने की आवश्यकता होगी।

दूसरी तरफ, मुझे हर कक्षा में संरचना परिभाषा रखना होगा जिसे इसकी आवश्यकता हो सकती है। (जब तक कि कुछ वैश्विक रूप से सुलभ स्थान न हो - क्या वहां है?) इसके अलावा, क्या एक संरचना एनएसएआरएआरई में संग्रहीत की जा सकती है?

उत्तर

18

मैं इसे कक्षा के साथ करूँगा। एक संरचना को एनएसएआरएआरई (या उस मामले के लिए किसी भी अन्य कंटेनर कक्षाओं में) में संग्रहीत नहीं किया जा सकता है, जब तक कि आप इसे NSValue में लपेटें, जिसे किया जा सकता है लेकिन थोड़ा सा है।

प्लस, जैसा कि आपने बताया है, आपको कहीं भी संरचना को परिभाषित करना होगा। सामान्य तरीका इसे एक वर्ग के लिए एक शीर्षलेख (.h) फ़ाइल में परिभाषित करना होगा। तो वहाँ एक संरचना से कोई 'लाभ' नहीं है।

+0

ग्रेट, अब मुझे पता है। –

+1

NSValue के बिना एक NSPointerArray में एक संरचना को काफी कुशलता से संग्रहीत किया जा सकता है (आपको विभिन्न कार्यों का उपयोग करके संरचना का वर्णन करना होगा)। लेकिन एआरसी के तहत, structs में अब ऑब्जेक्ट्स शामिल नहीं हो सकते हैं, जैसे कि एनएसएसटींग: आपको एक गीत शीर्षक जैसे किसी चार को डालना होगा, जो structs को बहुत कम उपयोगी बनाता है। तो, मैं कक्षाओं में बदल रहा हूँ। –

2

यह दोनों तरीकों से जा सकता है, लेकिन अपनी चिंताओं को अलग क्यों न करें और इसे अपनी खुद की कक्षा फ़ाइल में क्यों न रखें? इसके अलावा, ऐसा करना सोलिड के एकल जिम्मेदारी सिद्धांत के अनुरूप है। अपनी मुख्य कक्षा फ़ाइल को बदलने का एक और कारण क्यों दें? इसे तोड़ो

+0

धन्यवाद, अच्छा बिंदु। –

6

आप एनएसएआरएआरई में structs को स्टोर नहीं कर सकते हैं (इसके तरीकों के हस्ताक्षर देखें - वे सभी ऑब्जेक्ट लेते हैं और लौटते हैं)। लेकिन इसके अलावा, जैसा कि मैंने another recent question के जवाब में कहा था, structs में वस्तुओं को रखना हमेशा एक बुरा विचार है। वस्तुओं को बनाए रखने और जारी करने की आवश्यकता है और सही समय पर होने वाली सुनिश्चित करने के लिए structs के साथ उनके साथ जुड़े कोड नहीं हैं। यह मॉडल ऑब्जेक्ट के रूप में अधिक समझ में आता है।

+0

धन्यवाद, अच्छा बिंदु। –

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