Утечки показывают утечку, когда выделение UILabel, [NSNotificationCenter addObserver], кажется "UIAccessibilityButtonShapesChangedNotification" - PullRequest
0 голосов
/ 21 мая 2019

Нам впервые стало любопытно, когда наши самые большие утечки были из NSNotification addObserver кадров,

enter image description here

Если вы посмотрите на трассировку стека, похоже, что это происходит, когда мы инициализируем UILabel. enter image description here

Вот наш соответствующий код:

final class TileView: UIView {
  fileprivate let digitLabel        = UILabel()
  fileprivate let mainLineView      = UIView()
  fileprivate let secondaryLineView = UIView()

...

required init(builder: FlapViewBuilder, position: Position) {
    self.cornerRadii = CGSize(width: builder.cornerRadius, height: builder.cornerRadius)
    self.position    = position

    super.init(frame: CGRect.zero)

    setupViewsWithBuilder(builder)
}

Я установил символическую точку останова на addObserver и поймал протекающую раму. Я проверил регистры:

(lldb) register read
General Purpose Registers:
        x0 = 0x0000000283c937e0
        x1 = 0x00000001df7310a8  @"UIAccessibilityButtonShapesChangedNotification"
        x2 = 0x00000001d8b763e8  @"kCFNotificationAnyObject"
        x3 = 0x0000000000000400
        x4 = 0x0000000108e1dcb0
        x5 = 0x0000000000000000
        x6 = 0x000000016d72e4a0
        x7 = 0x0000000000000000
        x8 = 0x00000001a9493e74  Foundation`__57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_2
        x9 = 0x00000001d8d0e2b0  Foundation`__block_descriptor_48_e8_v16@?0@8l
       x10 = 0x000000010b814800
       x11 = 0x0000013f000001ff
       x12 = 0x000000010b8154a0
       x13 = 0x000001a1e23c6b97 (0x00000001e23c6b97) (void *)0x000001e23c738800
       x14 = 0x000000000000000f
       x15 = 0x00000001e238c95a  __CFCharToUniCharTable
       x16 = 0x00000001e23c6b90  (void *)0x000001a1e23c6bb9
       x17 = 0x00000001a7c0b250  libobjc.A.dylib`-[NSObject class]
       x18 = 0x0000000000000000
       x19 = 0x0000000108e1dcb0
       x20 = 0x00000001d5615e89  "_accessibilityButtonShapesChangedNotification:"
       x21 = 0x00000001df7310a8  @"UIAccessibilityButtonShapesChangedNotification"
       x22 = 0x0000000000000000
       x23 = 0x0000000283396370
       x24 = 0xfffffffef71e234f
       x25 = 0x0000000102e91000  "setShouldRasterize:"
       x26 = 0x0000000ffffffff8
       x27 = 0x00000001027c2054  Sideline`protocol witness for Sideline.SplitflapDelegate.splitflap(_: Sideline.Splitflap, builderForFlapAtIndex: Swift.Int) -> Sideline.FlapViewBuilder in conformance Sideline.SplitflapView : Sideline.SplitflapDelegate in Sideline at <compiler-generated>
       x28 = 0x000000010cc878d0
        fp = 0x000000016d72e500
        lr = 0x00000001a938d1a8  Foundation`-[NSNotificationCenter addObserver:selector:name:object:] + 256
        sp = 0x000000016d72e4a0
        pc = 0x00000001a938d224  Foundation`-[NSNotificationCenter addObserver:selector:name:object:] + 380
      cpsr = 0x60000000

Видел это: "UIAccessibilityButtonShapesChangedNotification"

Можем ли мы что-нибудь с этим сделать?
Может быть, просто ошибка с UILabel / UIKit?
Или я неверно истолковываю результаты отчета об утечках?

...