Use NSAutoreleasePool in places where needed

We may want to also consider wrapping the entire SDL window run loop with an `NSAutoreleasePool`. One for a rainy day.
This commit is contained in:
Salman Alshamrani
2025-01-17 02:23:42 -05:00
parent e54bb466b1
commit 82272aec2d
3 changed files with 30 additions and 21 deletions

View File

@@ -20,18 +20,21 @@ namespace osu.Framework.iOS.Graphics.Textures
protected override unsafe Image<TPixel> ImageFromStream<TPixel>(Stream stream)
{
int length = (int)(stream.Length - stream.Position);
using var nativeData = NSMutableData.FromLength(length);
using (new NSAutoreleasePool())
{
int length = (int)(stream.Length - stream.Position);
var nativeData = NSMutableData.FromLength(length);
var bytesSpan = new Span<byte>(nativeData.MutableBytes.ToPointer(), length);
stream.ReadExactly(bytesSpan);
var bytesSpan = new Span<byte>(nativeData.MutableBytes.ToPointer(), length);
stream.ReadExactly(bytesSpan);
using var uiImage = UIImage.LoadFromData(nativeData);
if (uiImage == null)
throw new ArgumentException($"{nameof(Image)} could not be created from {nameof(stream)}.");
using var uiImage = UIImage.LoadFromData(nativeData);
if (uiImage == null)
throw new ArgumentException($"{nameof(Image)} could not be created from {nameof(stream)}.");
var cgImage = new Platform.Apple.Native.CGImage(uiImage.CGImage!.Handle);
return ImageFromCGImage<TPixel>(cgImage);
var cgImage = new Platform.Apple.Native.CGImage(uiImage.CGImage!.Handle);
return ImageFromCGImage<TPixel>(cgImage);
}
}
}
}

View File

@@ -35,9 +35,12 @@ namespace osu.Framework.Platform.MacOS
using var stream = new MemoryStream();
image.SaveAsTiff(stream);
using var nsData = NSData.FromBytes(stream.ToArray());
using var nsImage = NSImage.LoadFromData(nsData);
return setToPasteboard(nsImage.Handle);
using (NSAutoreleasePool.Init())
{
var nsData = NSData.FromBytes(stream.ToArray());
using var nsImage = NSImage.LoadFromData(nsData);
return setToPasteboard(nsImage.Handle);
}
}
private IntPtr getFromPasteboard(IntPtr @class)

View File

@@ -20,18 +20,21 @@ namespace osu.Framework.Platform.MacOS
protected override unsafe Image<TPixel> ImageFromStream<TPixel>(Stream stream)
{
int length = (int)(stream.Length - stream.Position);
using var nativeData = NSMutableData.FromLength(length);
using (NSAutoreleasePool.Init())
{
int length = (int)(stream.Length - stream.Position);
var nativeData = NSMutableData.FromLength(length);
var bytesSpan = new Span<byte>(nativeData.MutableBytes, length);
stream.ReadExactly(bytesSpan);
var bytesSpan = new Span<byte>(nativeData.MutableBytes, length);
stream.ReadExactly(bytesSpan);
using var nsImage = NSImage.LoadFromData(nativeData);
if (nsImage.Handle == IntPtr.Zero)
throw new ArgumentException($"{nameof(Image)} could not be created from {nameof(stream)}.");
using var nsImage = NSImage.LoadFromData(nativeData);
if (nsImage.Handle == IntPtr.Zero)
throw new ArgumentException($"{nameof(Image)} could not be created from {nameof(stream)}.");
var cgImage = nsImage.CGImage;
return ImageFromCGImage<TPixel>(cgImage);
var cgImage = nsImage.CGImage;
return ImageFromCGImage<TPixel>(cgImage);
}
}
}
}