use instancetype whenever possible