mirror of
https://github.com/SK-la/osu-framework.git
synced 2026-03-13 11:20:31 +00:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user