В C# 6 и выше Вас может просто использовать синтаксис:
public object Foo { get; set; } = bar;
Примечание, что для имения readonly
свойство просто опускают набор, как так:
public object Foo { get; } = bar;
можно также присвоиться readonly
автосвойства от конструктора.
До этого я ответил как ниже.
я постарался бы не добавлять значение по умолчанию к конструктору; оставьте это для динамических присвоений и постарайтесь не иметь две точки, в которых переменная присвоена (т.е. значение по умолчанию типа и в конструкторе). Обычно я просто записал бы нормальное свойство в таких случаях.
Еще одна опция состоит в том, чтобы сделать, какой ASP.NET делает и определяет значения по умолчанию через атрибут:
http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
Похоже, вы указываете таблице вставить все разделы, что в основном эквивалентно перезагрузке. Когда вы сообщаете таблице, что ей нужно загрузить раздел, она должна прочитать все элементы в этом разделе. Кроме того, вы делаете это вне блока beginUpdates / endUpdates, что означает, что каждый раз, когда вы добавляете в раздел, таблица должна немедленно фиксировать изменения. Если вы заключите все в beginUpdates / endUpdates, он приостановит все запросы до тех пор, пока это не будет выполнено, что позволит системе объединить избыточные запросы и исключить запросы, которые оказываются ненужными.
Вы должны вызывать insertSections только с добавлены новые разделы. Если вы это сделаете, tableview не будет запрашивать информацию обо всех неизмененных разделах, даже если они перемещаются. Также, если элементы внутри раздела изменяются, а сам раздел не является, вам следует использовать строковую версию методов для изменения этих конкретных строк внутри раздела, и будут запрашиваться только эти строки.
Ниже приведен пример (из Приложение на основе CoreData), которое должно быть понятным. Поскольку у вас есть собственная модель вместо NSFetchedResultsController, вам нужно будет выяснить тип происходящего действия, а не просто проверять набор констант, переданных вам системой.
//Calculate what needs to be changed
[self.tableView beginUpdates];
for (i = 0 i < changeCount; i++) {
type = changes[i];
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:(id)[tableView cellForRowAtIndexPath:indexPath]
atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
[self.tableView endUpdates];