这是用于一个允许用户标记事物的应用程序。 标记只是字符串 。
TagHolder
对象的数组持有应用程序中使用的所有标记列表, 并有一个布林告知是否选中了标记, 但这是执行细节 。
外部界面需要两种方法,即 选择 Tags
和 setSectiveTags:
返回并接受字符串数组的方法。
我希望这两种方法能够作为申报财产selected Tags
的存取者。
现在,我的问题是:
正确的内存管理语义是什么来申报该财产的?
我想到的代码模式是这样的(没有测试的代码, 请用打字机写下) :
@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
emorytype
应该是什么? 显然不是强或弱, 但我认为它可能是 指派
、 copy
或甚至 unsafe_unreserved
的任意一种, 但对于带有对象值的计算属性来说,哪种最正确?
我通常使用ARC, 但我猜这个问题在人工保留量的环境下是相同的。