allocWithZone प्रयोग करने के लिए एक अच्छा उदाहरण है: जब आप NSCopy प्रोटोकॉल, आप अपने कस्टम की तरह (मूल्य से गहरी कॉपी/प्रतिलिपि) वस्तुओं copyable बनाने की अनुमति देता है जो कार्यान्वित कर रहे हैं:
(1) ClassName *newObject = [currentObject copy]; //results in newObject being a copy of currentObject not just a reference to it
NSCopy प्रोटोकॉल आप एक विधि को लागू सुनिश्चित करता है:
(2) -(id)copyWithZone:(NSZone *)zone;
जब एक वस्तु 'प्रतिलिपि' संदेश आप के रूप में ऊपर भेजने को कॉपी (1) जब 'के रूप में copyWithZone (विधि को संदेश भेजता है कहा 2)। उर्फ आपको ज़ोन प्राप्त करने के लिए कुछ भी करने की ज़रूरत नहीं है।
अब जब आपके पास इस संदेश पर भेजा गया 'ज़ोन' है, तो आप यह सुनिश्चित करने के लिए इसका उपयोग कर सकते हैं कि एक प्रतिलिपि उसी क्षेत्र में स्मृति से बनाई गई हो।
इस तरह इस्तेमाल किया जा सकता है:
-(id)copyWithZone:(NSZone *)zone
{
newCopy = [[[self class]allocWithZone:zone]init]; //gets the class of this object then allocates a new object close to this one and initialises it before returning
return(newCopy);
}
यह केवल जगह मुझे पता है allocWithZone वास्तव में प्रयोग किया जाता है हूँ।
स्रोत
2011-11-18 13:44:27
ध्यान दें कि वर्तमान (2014) ऐप्पल दस्तावेज कहता है कि 'जोन' पैरामीटर को अनदेखा किया गया है, और "यह विधि ऐतिहासिक कारणों से मौजूद है; स्मृति क्षेत्र अब उद्देश्य-सी द्वारा उपयोग नहीं किए जाते हैं।" तो स्वीकृत उत्तर अब सही नहीं हो सकता है। –