@interface SomeClass : NSObject
@property (copy, nonatomic) NSString *usefulString;
@property (strong, nonatomic) NSString *dangerousString;
@property (copy, nonatomic) NSURL *curiousURLOne;
@property (strong, nonatomic) NSURL *curiousURLTwo;
@end
उपरोक्त वर्ग में, dangerousString
को एक बुरा विचार माना जाता है क्योंकि NSMutableString
NSString
से विरासत में है। मतलब यह संभव है कि आपकी कक्षा का उपयोगकर्ता एक म्यूटेबल स्ट्रिंग को dangerousString
पर सेट कर सके, और उसके बाद SomeClass
के उदाहरण के नीचे से म्यूटेबल स्ट्रिंग के मान को बदल दें। संपत्ति usefulString
में यह खतरा नहीं है क्योंकि यह मान को एक नए (अपरिवर्तनीय) स्ट्रिंग ऑब्जेक्ट में प्रतिलिपि बनाता है।NSURL - कोई म्यूटेबल सबक्लास नहीं, इसलिए किसी संपत्ति के रूप में "प्रतिलिपि" करने की आवश्यकता नहीं है?
हालांकि, यह NSURL
के लिए की तरह लगता है (और किसी भी अन्य आधार वर्गों परिवर्तनशील समकक्षों की जरूरत नहीं है कि - जैसे NSNumber
) प्रतिलिपि संपत्ति घोषणा के अर्थ अनावश्यक है। NSURL
NSCopying के copyWithZone:
का पालन करती है (... लेकिन मुझे आश्चर्य है कि अगर यह सिर्फ एक वृद्धि को बनाए रखने गिनती के साथ एक ही वस्तु वापस नहीं करता है - कारण है कि यह कुछ और करना होगा)
तुम क्यों गुण घोषणा करेंगे copy
के रूप में जो उत्परिवर्तित होने का खतरा नहीं है?
TrickThemURL सिर्फ -copy पर हावी नहीं होगा अगर यह दुर्भावनापूर्ण बनना चाहता था? – Darren
@ डैरेन मुझे लगता है कि आप सही हैं - सुरक्षित होने का एक तरीका '[NSURL urlWithString: urlArg.standardizedURL]' का उपयोग करना है और फिर परिणाम को सत्यापित करना है। – dasblinkenlight
इस चर्चा के आधार पर ऐसा लगता है कि 'मजबूत' "सुरक्षित" है। यह एक बिल्ली और माउस गेम के लिए एक अवसर खोलता है, लेकिन यह ठीक हो सकता है जब तक कि इस वर्ग की उपयोगिता एक ही आवेदन की सीमा से परे बढ़ जाती है। – edelaney05