У меня теоретическое сомнение в отношении двух типов объявления изменяемого объекта в iOS (и MacOSX, я думаю) с ARC.ключевое слово «копировать» iOS на разрешимых объектах
Какая разница между декларацией в NSMutableArray в расширении класса, как код ниже:
@interface MyViewController()
@property (copy) NSMutableArray* myMutableArray;
@end
//Class implementation
@implementation MyViewController
...
- (void)viewDidLoad
{
_myMutableArray = [@[] mutableCopy];
}
и заявление того же массива таким образом
@interface MyViewController()
@property (nonatomic, strong) NSMutableArray* myMutableArray;
@end
//Class implementation
@implementation MyViewController
...
- (void)viewDidLoad
{
_myMutableArray = [@[] mutableCopy];
}
Какой из них лучше? Я видел обе версии и, по-видимому, оба отлично работают. Однако я хотел бы знать, какой из них является лучшим вариантом. Я знаю, что ключевым словом «copy» является использование копии для классов, которые являются частью кластера классов, которые имеют изменяемые/неизменяемые пары. Таким образом, в этом случае он представляется правильным выбором. Но использование ключевого слова «copy» и свойство «mutableCopy» (как и первый пример) кажется для меня дубликатом. Я ошибаюсь? Спасибо!
Спасибо за объяснение. Однако с введением литералов я часто видел такую декларацию: 'self.myMutableArray = [@ [@" Один ", @" Два ", @" Три "] mutableCopy];' – nicopasso
Правильно, поскольку буквальный является неизменным, это создает изменчивую копию. –
Да, это имеет смысл для буквального массива с чем-то в нем, но не для пустого. – jrturton