これは、ユーザーがタグ付けできるアプリ用です。タグは単なる文字列です。
オブジェクトの配列はTagHolder
、アプリで使用されているすべてのタグのリストを保持し、タグが選択されているかどうかをブール値で示しますが、これは実装の詳細です。
外部インターフェイスは、文字列の配列を返したり受け取ったりするselectedTags
との 2 つのメソッドを呼び出します。setSelectedTags:
これら 2 つのメソッドを、宣言されたプロパティのアクセサーとして機能させたいと考えています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
が、オブジェクト値を持つ計算されたプロパティに対して最も正しいのはどれですか?
私は通常ARCを使用していますが、手動保持カウントの環境でも質問は同じだと思います。