स्टनर नहीं समझा वस्तुओं कि पहले से ही बनाया गया है init alloc करने की जरूरत का एक अच्छा काम किया है।
लेकिन यदि यह एक वस्तु है जो अस्तित्व में नहीं है, तो आप इसे कहां बनाने जा रहे हैं? एक बहुत ही सामान्य पैटर्न, जिसका मैं उल्लेख करता हूं क्योंकि आपने इसे अपनी पोस्ट में उल्लेख किया है, आलसी तत्काल है।
तो आप एक एनएसएमयूटेबलएरे संपत्ति चाहते हैं। आप इसका उपयोग करने से पहले इसे किसी विधि में आवंटित कर सकते हैं, लेकिन फिर आपको चिंता करना होगा "क्या मुझे अपनी सरणी की आवश्यकता होने से पहले उस विधि को बुलाया जाता है?" या "क्या मैं इसे फिर से गलती से कॉल करने जा रहा हूं और इसे फिर से शुरू कर दूंगा।"
तो एक फेलसेफ जगह यह संपत्ति के गेटर में है क्या करना है। हर बार जब आप संपत्ति का उपयोग करते हैं तो इसे बुलाया जाता है।
.h
@property (nonatomic, strong) NSMutableArray* myArray;
.m
@synthesize myArray = _myArray;
- (NSMutableArray*)myArray
{
if (!_myArray) {
_myArray = [[NSMutableArray alloc] initWithCapacity:2];
}
return _myArray;
}
आप का उपयोग है कि संपत्ति है, यह कहते हैं, हर बार जब "मौजूद myArray? यदि नहीं, तो यह पैदा करते हैं। यह है, बस मैं क्या है वापस नहीं आ जाते है।"
प्लस इस डिज़ाइन पैटर्न के साथ एक अतिरिक्त लाभ यह है कि आप संसाधनों को तब तक नहीं बना रहे हैं जब तक आपको उनकी आवश्यकता न हो, बनाम उन्हें एक बार में बनाते हुए कहें, जब आपका व्यू कंट्रोलर लोड हो या आपका ऐप लॉन्च हो, जो आवश्यकताओं के आधार पर, कुछ सेकंड ले सकता है।
स्रोत
2012-08-02 02:34:47
+1 बहुत अच्छा सवाल है। ओजबसी शुरुआती लोगों के लिए अभी तक आवंटित/इनिट संपत्ति को संदेश भेजना एक आम गलती है। – Philip007