저는 XF 1.0부터 Xamarin을 개발해 왔습니다. 메모리 누출은 XF 1.0에서 XF 2.4까지 큰 문제였습니다. 나는 항상 각 ContentPage 및 ViewModel 클래스에서 Dispose Pattern을 구현하여 이벤트 핸들러, 메시지 구독자, 객체 참조가 모두 제거되고 각 클래스의 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에, 우리는이 페이지의 여러 인스턴스가 메모리에 유지하고 쓰레기통에 의한 수집되지 않습니다 볼 수 있습니다 OnDisappearing() 함수에서 코드의 주석 처리를 제거하지 않으면 이벤트 처리기 및 구독자가 제거되지 않고 ContactUsPage 인스턴스를 가리키는 개체 참조를 만들었습니다.
위의 코드는 Xamarin.Forms 2.4.0.280에서 컴파일 할 때 더 이상 Xamarin iOS에서 메모리 누수가 발생하지 않지만 참조 카운팅 가비지 수집이 작동하는 방법에 대한 지식이 있으므로 분명히 메모리가 누출됩니다. 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/)에서 해당 항목을 찾지 못했습니다. . –