feat: use NSHashTable to avoid memory leak

This commit is contained in:
dscyrescotti
2024-06-10 23:54:14 +07:00
parent d983464402
commit 164fd457a3
2 changed files with 4 additions and 4 deletions

View File

@@ -59,7 +59,7 @@ final class GraphicContext: @unchecked Sendable {
eraserStrokes.remove(eraserStroke)
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
guard let eraserStroke else { return }
for penStroke in eraserStroke.penStrokes {
for penStroke in eraserStroke.penStrokes.allObjects {
penStroke.eraserStrokes.remove(eraserStroke)
if let object = eraserStroke.object {
penStroke.object?.erasers.remove(object)
@@ -94,7 +94,7 @@ final class GraphicContext: @unchecked Sendable {
eraserStrokes.insert(eraserStroke)
withPersistence(\.backgroundContext) { [weak eraserStroke] context in
guard let eraserStroke else { return }
for penStroke in eraserStroke.penStrokes {
for penStroke in eraserStroke.penStrokes.allObjects {
penStroke.eraserStrokes.insert(eraserStroke)
if let object = eraserStroke.object {
penStroke.object?.erasers.add(object)

View File

@@ -34,7 +34,7 @@ final class EraserStroke: Stroke, @unchecked Sendable {
weak var graphicContext: GraphicContext?
var finishesSaving: Bool = false
var penStrokes: Set<PenStroke> = []
var penStrokes: NSHashTable<PenStroke> = .weakObjects()
init(
bounds: [CGFloat],
@@ -112,7 +112,7 @@ final class EraserStroke: Stroke, @unchecked Sendable {
for stroke in graphicContext.tree.search(box: _quad.quadBox) {
if let _penStroke = stroke.stroke(as: PenStroke.self), !_penStroke.eraserStrokes.contains(self) {
_penStroke.eraserStrokes.insert(self)
penStrokes.insert(_penStroke)
penStrokes.add(_penStroke)
if let penStroke = _penStroke.object {
penStroke.erasers.add(eraser)
eraser.strokes.add(penStroke)