When you call addAnnotation
or addAnnotations
, the map view adds the reference(s) to its internal list of annotations.
The annotations
property of MKMapView
simply returns this internal list (whatever type it might be) as an NSArray
.
I don’t know of any place in the documentation where it states that the annotations
property returns the array in the same order that you added the annotations in. If you have showsUserLocation
turned on, the array will include that annotation even though you didn’t explicitly add it.
You do not need to be concerned about nor should you depend on the order of the objects in the annotations
property.
Just a few suggestions regarding the code:
- Since your
array
contains objects that implement<MKAnnotation>
, instead of looping through it, you can add all the annotations in one shot by callingaddAnnotations
(plural) and pass it the array - In
viewForAnnotation
, none of the properties you are setting depend on any specific annotation so you can set them all inside theif (av == nil)
block. This way you get maximum reuse. - Also in
viewForAnnotation
, after and outside theif
, you should set theannotation
property of the view to the current annotation. This is in case the view is being reused from another annotation. - Finally, in
viewForAnnotation
, don’t assume theannotation
will be of typeMyClass
. If you turn onshowsUserLocation
, that won’t be the case. It’s safer to declare the parameter asid<MKAnnotation>
and then if necessary check what its class is and then cast it.