Нам впервые стало любопытно, когда наши самые большие утечки были из NSNotification addObserver
кадров,
Если вы посмотрите на трассировку стека, похоже, что это происходит, когда мы инициализируем UILabel.
Вот наш соответствующий код:
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?
Или я неверно истолковываю результаты отчета об утечках?