यह एक ऐप के लिए है जो उपयोगकर्ताओं को चीजों को टैग करने की अनुमति देता है। टैग सिर्फ तार हैं।एक गणना की गई सरणी संपत्ति का मेमोरी अर्थशास्त्र?
TagHolder
ऑब्जेक्ट्स की एक सरणी ऐप में उपयोग में आने वाले सभी टैग की एक सूची रखती है, जिसमें एक बूलियन बताता है कि टैग चुना गया है, लेकिन यह एक कार्यान्वयन विस्तार है।
बाहरी इंटरफ़ेस दो विधियों, selectedTags
, और setSelectedTags:
के लिए कॉल करता है जो स्ट्रिंग के सरणी लौटते हैं और स्वीकार करते हैं।
मैं इन दो विधियों को घोषित संपत्ति selectedTags
के लिए एक्सेसर्स के रूप में काम करना चाहता हूं।
अब, मेरे सवाल यह है:
सही स्मृति प्रबंधन अर्थ विज्ञान क्या होगा कि संपत्ति के लिए घोषित करने के लिए?
कोड पैटर्न मैं मन में है कि (, कोड का परीक्षण नहीं किया तो लिखने की त्रुटियों के साथ सहन कृपया) यह है:
@interface TagInfo : NSObject
@property (strong, nonatomic) NSString *tag;
@property (nonatomic) BOOL selected;
@end
@interface SomeClass : NSObject
@property (memorytype, nonatomic) NSArray *selectedTags;
@end
@implementation TagHolder
- (NSArray *)selectedTags
{
// tagInfoArray is an array of all TagInfo objects
NSPredicate *selPred = [NSPredicate predicateWithFormat: @"selected == YES"];
NSArray *selectedTagInfoObjects = [[self tagInfoArray] filteredArrayUsingPredicate: selPred];
NSArray *selectedTags = [selectedTagInfoObjects valueForKey: @"tag"];
return selectedTags;
}
- (void)setSelectedTags: (NSArray *)selectedTags
{
for (TagInfo *tagInfo in [self tagInfoArray]) {
tagInfo.selected = [selectedTags containsObject: tagInfo.tag];
}
}
@end
क्या memorytype
होना चाहिए? स्पष्ट रूप से मजबूत या कमजोर नहीं, लेकिन मुझे लगता है कि यह assign
, copy
या unsafe_unretained
में से कोई भी हो सकता है, लेकिन ऑब्जेक्ट वैल्यू के साथ गणना की गई संपत्ति के लिए कौन सा सबसे सही है?
मैं आम तौर पर एआरसी का उपयोग करता हूं, लेकिन मुझे लगता है कि प्रश्न मैन्युअल बनाए रखने के साथ पर्यावरण में समान है।