自XF 1.0以來,我一直在開發Xamarin。從XF 1.0到現在的XF 2.4,內存泄漏是一個巨大的問題。我一直在所有ContentPage和ViewModel類中實現Dispose模式,以確保Event Handler,Message Subscribers,對象引用全部被刪除,並在每個類的OnDisappearing()或Dispose()函數中設置爲null。Xamarin.Forms 2.4.0及以上版塊中的Xamarin.iOS不再使用引用計數方法嗎?
這是一件非常有趣的事情。在將我的項目從2.3.3.180升級到Xamarin.Forms 2.4.0.280之後。我發現這種類型的代碼用於在Xamarin.iOS中創建內存泄漏不再發生。 代碼示例:
public partial class ContactUsPage : ContentPage
{
public ContactUsPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
//Lets say I have button named "btn" declared in Xaml page
btn.Clicked += OnButtonClicked
MessagingCenter.Subscribe<CoreMessenger, string>(this, "AMessageType", (sender, arg) =>
{
//some code
});
}
protected override void OnDisappearing()
{
//btn.Clicked -= OnButtonClicked
//MessagingCenter.Unsubscribe<CoreMessenger, string>(this, "AMessageType");
}
}
此前Xamarin.Forms 2.4,如果我們push和pop此產品的模態多時間裏,我們會看到這個頁面的多個實例堅持記憶,絕不會因被垃圾收集除非我們取消註釋OnDisappearing()函數中的代碼,否則不會刪除事件處理程序和訂閱服務器,並且它們會創建指向ContactUsPage實例的對象引用。
上面的代碼不再在Xamarin iOS中編譯時產生內存泄漏,當在Xamarin.Forms 2.4.0.280中編譯時,雖然根據我對如何引用計數垃圾收集工作的知識,它顯然正在泄漏內存。 Xamarin是否改變了Xamarin.iOS的GC方法?所以它正在像Xamarin那樣標記和掃描.Android現在呢?
誰能告訴我是什麼改變了,爲什麼? 謝謝!
沒有找到關於它的[Xamarin.forms 2.4發行說明]什麼(https://developer.xamarin.com/releases/xamarin-forms/xamarin-forms-2.4/2.4.0-stable/) 。 –