gpt4 book ai didi

objective-c - 计算数组属性的内存语义?

转载 作者:太空狗 更新时间:2023-10-30 03:51:20 25 4
gpt4 key购买 nike

这是一款允许用户标记事物的应用程序。标签只是字符串。

TagHolder 对象数组包含应用程序中使用的所有标签的列表,并带有一个 bool 值,用于告知标签是否已被选中,但这是一个实现细节。

外部接口(interface)调用两个方法,selectedTagssetSelectedTags:,它们返回并接受字符串数组。

我希望这两种方法可以用作已声明属性 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 应该是什么?显然没有强弱之分,但我认为可以是assigncopy甚至unsafe_unretained中的任何一个,但哪个是最正确的对于具有对象值的计算属性?

我通常使用 ARC,但我想在手动保留计数的环境中问题是相同的。

最佳答案

memorytype 仅在您 @synthesize 您的属性访问器时才有意义。由于您为 getter 和 setter 提供了自己的实现,因此您在 @property 之后放在括号中的内容将被忽略;我通常把 readonlyreadwrite 放在那里,只是为了提醒自己对这些属性有什么样的访问权限。

您的代码是正确的,无论有没有 ARC,它都可以工作而不会产生内存问题。

关于objective-c - 计算数组属性的内存语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com