У меня есть UIPickerViewModel
, который должен вызывать событие при изменении выбранного значения, но к моменту вызова Selected
значение EventHandler
будет нулевым.Код (несколько упрощенно):
public class MyPickerViewModel: UIPickerViewModel {
public event EventHandler SelectionChanged;
public void PrintWhetherSelectionChangedIsNull() {
System.Console.WriteLine(SelectionChanged == null ? "yes" : "no");
}
public override void Selected(UIPickerView picker, int row, int comp) {
if (SelectionChanged != null) { // it always is, though
SelectionChanged(this, new EventArgs());
}
}
}
public class SomeView: UIView {
SomeView(MyPickerViewModel model) {
model.SelectionChanged += delegate(object s, EventArgs e) {
DoSomething();
}
model.PrintWhetherSelectionChangedIsNull(); // prints "no"
}
private void DoSomething() { /* never called */ }
}
Я почти уверен, что есть только один экземпляр модели, и что EventHandler
не равен нулю, прежде чем снова стать нулевым.
IЯ предполагаю, что делегаты, которых я добавил в EventHandler
, собирают мусор или что-то в этом роде, но это всего лишь предположение.Может кто-нибудь указать мне хороший учебник по жизненным циклам объектов C # / iOS?
Обновление: Я попытался использовать именованную EventHandler
, переменную экземпляра в представлении, и проблема все еще существует,Так что это не просто проблема сбора мусора.