В моей программе есть функция, которая создает новые виджеты для представления данных, однако всякий раз, когда виджет создается, я получаю много сообщений об ошибке «AutoRelease без NSAutoReleasePool на месте».Так как NSAutoReleasePool должен автоматически создаваться в главном потоке, у меня есть предположение, что эти сообщения об ошибках появляются, потому что асинхронная функция может создавать мои потоки ...
Эта функция вызывается для создания виджетов, представляющих последниеИнформация.Эта функция вызывается довольно часто:
private void CreateAndDisplayTvShowWidget (TvShow show)
{
var Widget = new TvShowWidgetController (show);
Widget.OnRemoveWidget += ConfirmRemoveTvShow;
Widget.View.SetFrameOrigin (new PointF (0, -150));
Widget.View.SetFrameSize (new SizeF (ContentView.Frame.Width, 150));
ContentView.AddSubview (Widget.View);
show.ShowWidget = Widget;
}
Эта функция обычно вызывается, когда эта асинхронная функция возвращает:
private static void WebRequestCallback (IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse (result);
StreamReader responseStream = new StreamReader (response.GetResponseStream ());
string responseString = responseStream.ReadToEnd ();
responseStream.Close ();
ProcessResponse (responseString, request);
}
ProcessResponse (responseString, request) выглядит так:
private static void ProcessResponse (string responseString, HttpWebRequest request)
{
string requestUrl = request.Address.ToString ();
if (requestUrl.Contains (ShowSearchTag)) {
List<TvShow> searchResults = TvDbParser.ParseTvShowSearchResults (responseString);
TvShowSearchTimeoutClock.Enabled = false;
OnTvShowSearchComplete (searchResults);
} else if (requestUrl.Contains (MirrorListTag)) {
MirrorList = TvDbParser.ParseMirrorList (responseString);
SendRequestsOnHold ();
} else if (requestUrl.Contains (TvShowBaseTag)) {
TvShowBase showBase = TvDbParser.ParseTvShowBase (responseString);
OnTvShowBaseRecieved (showBase);
} else if (requestUrl.Contains (ImagePathReqTag)) {
string showID = GetShowIDFromImagePathRequest (requestUrl);
TvShowImagePath imagePath = TvDbParser.ParseTvShowImagePath (showID, responseString);
OnTvShowImagePathRecieved (imagePath);
}
}
CreateAndDisplayTvShowWidget (TvShow show) вызывается при вызове события OnTvShowBaseRectained (TvShow), когда я получаю тонны сообщений об ошибках, касающихся NSAutoReleasePool ...
Последние две функции являются частью того, чтопредполагается, что это кроссплатформенная сборка, поэтому у меня не может быть никакого кода, специфичного для MonoMac ...
Я никогда не называю никакого кода автоматического выпуска или выпуска для своих виджетов, поэтому я предполагаю, чтоПривязки MonoMac делают это автоматически как часть своей сборки мусора?