<!--
{
  "availability" : [
    "iOS: 2.0.0 -",
    "iPadOS: 2.0.0 -",
    "macCatalyst: 13.1.0 -",
    "tvOS: -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UITableView/beginUpdates()",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(cs)UITableView(im)beginUpdates"
  },
  "title" : "beginUpdates()"
}
-->

# beginUpdates()

Begins a series of method calls that insert, delete, or select rows and sections of the table view.

```
func beginUpdates()
```

## Discussion

Use the [`performBatchUpdates(_:completion:)`](/documentation/UIKit/UITableView/performBatchUpdates(_:completion:)) method instead of this one whenever possible.

Call this method if you want subsequent insertions, deletion, and selection operations (for example, [`cellForRow(at:)`](/documentation/UIKit/UITableView/cellForRow(at:)) and [`indexPathsForVisibleRows`](/documentation/UIKit/UITableView/indexPathsForVisibleRows)) to be animated simultaneously. You can also use this method followed by the [`endUpdates()`](/documentation/UIKit/UITableView/endUpdates()) method to animate the change in the row heights without reloading the cell. This group of methods must conclude with an invocation of [`endUpdates()`](/documentation/UIKit/UITableView/endUpdates()). These method pairs can be nested. If you don’t make the insertion, deletion, and selection calls inside this block, table attributes such as row count might become invalid. You shouldn’t call [`reloadData()`](/documentation/UIKit/UITableView/reloadData()) within the group; if you call this method within the group, you must perform any animations yourself.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)