mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-05-17 21:27:09 +02:00
feat: use NSHashTable to avoid memory leak
This commit is contained in:
@@ -59,7 +59,7 @@ final class GraphicContext: @unchecked Sendable {
|
|||||||
eraserStrokes.remove(eraserStroke)
|
eraserStrokes.remove(eraserStroke)
|
||||||
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
|
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
|
||||||
guard let eraserStroke else { return }
|
guard let eraserStroke else { return }
|
||||||
for penStroke in eraserStroke.penStrokes {
|
for penStroke in eraserStroke.penStrokes.allObjects {
|
||||||
penStroke.eraserStrokes.remove(eraserStroke)
|
penStroke.eraserStrokes.remove(eraserStroke)
|
||||||
if let object = eraserStroke.object {
|
if let object = eraserStroke.object {
|
||||||
penStroke.object?.erasers.remove(object)
|
penStroke.object?.erasers.remove(object)
|
||||||
@@ -94,7 +94,7 @@ final class GraphicContext: @unchecked Sendable {
|
|||||||
eraserStrokes.insert(eraserStroke)
|
eraserStrokes.insert(eraserStroke)
|
||||||
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
|
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
|
||||||
guard let eraserStroke else { return }
|
guard let eraserStroke else { return }
|
||||||
for penStroke in eraserStroke.penStrokes {
|
for penStroke in eraserStroke.penStrokes.allObjects {
|
||||||
penStroke.eraserStrokes.insert(eraserStroke)
|
penStroke.eraserStrokes.insert(eraserStroke)
|
||||||
if let object = eraserStroke.object {
|
if let object = eraserStroke.object {
|
||||||
penStroke.object?.erasers.add(object)
|
penStroke.object?.erasers.add(object)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ final class EraserStroke: Stroke, @unchecked Sendable {
|
|||||||
weak var graphicContext: GraphicContext?
|
weak var graphicContext: GraphicContext?
|
||||||
|
|
||||||
var finishesSaving: Bool = false
|
var finishesSaving: Bool = false
|
||||||
var penStrokes: Set<PenStroke> = []
|
var penStrokes: NSHashTable<PenStroke> = .weakObjects()
|
||||||
|
|
||||||
init(
|
init(
|
||||||
bounds: [CGFloat],
|
bounds: [CGFloat],
|
||||||
@@ -112,7 +112,7 @@ final class EraserStroke: Stroke, @unchecked Sendable {
|
|||||||
for stroke in graphicContext.tree.search(box: _quad.quadBox) {
|
for stroke in graphicContext.tree.search(box: _quad.quadBox) {
|
||||||
if let _penStroke = stroke.stroke(as: PenStroke.self), !_penStroke.eraserStrokes.contains(self) {
|
if let _penStroke = stroke.stroke(as: PenStroke.self), !_penStroke.eraserStrokes.contains(self) {
|
||||||
_penStroke.eraserStrokes.insert(self)
|
_penStroke.eraserStrokes.insert(self)
|
||||||
penStrokes.insert(_penStroke)
|
penStrokes.add(_penStroke)
|
||||||
if let penStroke = _penStroke.object {
|
if let penStroke = _penStroke.object {
|
||||||
penStroke.erasers.add(eraser)
|
penStroke.erasers.add(eraser)
|
||||||
eraser.strokes.add(penStroke)
|
eraser.strokes.add(penStroke)
|
||||||
|
|||||||
Reference in New Issue
Block a user