Đây là ứng dụng cho phép người dùng gắn thẻ mọi thứ. Thẻ chỉ là chuỗi.Ngữ nghĩa bộ nhớ của thuộc tính mảng được tính toán?
Một mảng gồm TagHolder
đối tượng chứa danh sách tất cả các thẻ được sử dụng trong ứng dụng, với boolean thông báo nếu thẻ được chọn, nhưng đây là chi tiết triển khai.
Giao diện bên ngoài gọi hai phương thức, selectedTags
và setSelectedTags:
trả về và chấp nhận một mảng chuỗi.
Tôi muốn hai phương thức này hoạt động như người truy cập cho thuộc tính được khai báo selectedTags
.
Bây giờ, câu hỏi của tôi là:
Điều gì sẽ là ngữ nghĩa quản lý bộ nhớ đúng để khai báo cho tài sản đó?
Các mẫu mã mà tôi có trong tâm trí là thế này (mã chưa được thử nghiệm, vì vậy xin vui lòng chịu với lỗi chính tả):
@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
nên memorytype
được gì? Rõ ràng là không mạnh hoặc yếu, nhưng tôi nghĩ nó có thể là bất kỳ một trong số assign
, copy
hoặc thậm chí unsafe_unretained
, nhưng cái nào là đúng nhất cho thuộc tính được tính với giá trị đối tượng?
Tôi thường sử dụng ARC, nhưng tôi đoán câu hỏi là giống nhau trong một môi trường có số lần giữ thủ công.