maxsokolov / TableKit

Type-safe declarative table views.
MIT License
706 stars 74 forks source link

Append to section - memory leak #68

Closed denisenkoaj closed 7 years ago

denisenkoaj commented 7 years ago

@maxsokolov Привет! Во-первых Макс спасибо за отличную библиотеку! Но похоже есть небольшой memory leak, посмотри:

In English: I have very strange memory leak, it appears when i try append row in sections.

func reloadData() {
        _ = tableDirector.clear()
        // Row number for selected city (for scrolling)
        var selectedCityRowNumber = 0

        if let cityList = cityList {
            for city in cityList {
                let isSelected = (selectedCityId == city.id) ? true : false
                let row = TableRow<SelectDepartureCityScreenTableViewCell>(item: (city, isSelected)).on(.click) { [weak self] data in

                    // Handler on cell clicking
                    self?.output.didTapDepartureCity(withId: data.item.city.id)
                }
                section.append(row: row)

                if isSelected {
                    selectedCityRowNumber = section.numberOfRows
                }
            }

            tableDirector += section

            // Scroll to selected number
            let selectedPath = IndexPath(row: selectedCityRowNumber, section: 0)
            tableDirector.tableView?.scrollToRow(at: selectedPath, at: .middle, animated: false)
        }
    }
}

на section.append вылазит memory leak:

screenshot at aug 16 02-16-48

Как не пробовал, не могу от него избавится, есть идеи? Чуть чуть другой текст вылазит если без создания section'a делать например tableDirector += row Или отдельно создавать TableRowAction , и потом заносить его в конструктор TableRow, утечка остается просто текст утечки немного меняется

maxsokolov commented 7 years ago

@denisenkoaj привет! А есть возможность прикрепить демо-проект, чтобы подебажить его? С одним экранчиком, где можно воспроизвести баг. По текущему листингу сложно сказать, что там может быть не так.

denisenkoaj commented 7 years ago

@maxsokolov да конечно :D tableKitMemoryLeakExample.zip

XCode Version 8.3.3 (8E3004b)

denisenkoaj commented 7 years ago
screenshot at aug 16 12-54-57
maxsokolov commented 7 years ago

@denisenkoaj благодарю! Взгляну чуть позже.

maxsokolov commented 7 years ago

@denisenkoaj странная штука. Я проверил через Instruments, там действительно возникает какая-то утечка. Но я последил за объектами TableDirector/TableSection/TableRow/TableRowAction через deinit они все нормально деалоцируются после покиданная экрана.

OdNairy commented 7 years ago

Один из фиксов в Xcode 9 был в том, что они пофиксили мнимые лики в инструментах. Проверьте апплик на последней бете.

P.S. This repo doesn't seem to be russion-only so it's very recommended to use English in discussions.

denisenkoaj commented 7 years ago

@maxsokolov
Try to use memory graph capture, as i can see - for example - after deinit view controller we still have 2 instances of TableSection

@OdNairy , thanks, i will try to reproduce on XCode 9 ,and let you know.

screenshot at aug 16 18-14-26
denisenkoaj commented 7 years ago

@maxsokolov @OdNairy , I've checked this on XCode 9 beta 4, there is no memory leak. It seems that is really bug of XCode 8. Problem is solved :) 👍