Должен ли я просматривать документы Apple и видеть, сохраняет ли получатель вид или контроллер?
Нет. В целом (> 98% API) MonoTouch будет обрабатывать необходимые ссылки, чтобы ваш управляемый объект работал столько времени, сколько требуется. Это может быть сделано, потому что вы вызываете некоторый управляемый (C #) код из вашего приложения. Э.Г.
this.PresentModalViewController(oSettingsController, true);
Это позволяет управляемому методу PresentModalViewController сохранять ссылку (при необходимости) на oSettingsController столько времени, сколько необходимо.
Так в чем проблема с некоторыми API? Проблема в том, кто вызывает API. Э.Г.
public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation)
Если бы это называлось формой C #, то это не было бы проблемой, т. Е. Ваше утверждение относительно pure C # в основном правильно.
Однако он вызывается из ObjectiveC , поскольку мы переопределяем метод из унаследованного нативного типа. Таким образом, в этом случае управляемый объект view не имеет (управляемой) ссылки (если только вы не добавите ее, как в примере # 1) после возврата метода. Но собственный вызывающий объект будет сохранять собственный часть представления , поэтому все будет работать ... пока ваше приложение не попытается вернуться в управляемый код.
Так как управляемый узел, например, view , было собрано, тогда все, что удалось внутри него, будет собрано тоже (например, кнопка ). Вот почему сбой часто происходит в событиях, например, в делегате, назначенном вами TouchDown .
При этом мы работаем над решением, которое охватит этот случай и в будущих версиях MonoTouch. Добавьте себя на c.c. отчет об ошибке , если вы хотите получать уведомления о прогрессе.