reference to our original locations datasource. Being reference types, you can’t just assign copiedDataSource = dataSource. Anything that happens to copiedDataSource will affect dataSource because they share the same pointer. In order to copy objects entirely, with a new chunk of memory and a new pointer, we must use NSCopying. The object being copied must conform to the NSCopying protocol. Under the hood, copyWIthZone: is called on the object being copied.