Открытие, у кого есть сохранить количество к объекту

Вы можете попробовать создать div, а затем заполнить его тем, что вы хотите.

код:

from flask import Flask
import dash
import dash_core_components as dcc
import dash_html_components as html
# if you import in a such way - you can call Input, Output directly
from dash.dependencies import Input, Output
# Create app
app = dash.Dash()
# Specify layout
app.layout = html.Div(children=[
    html.H1('Sports PA Dashboard'),
    dcc.Dropdown(
        id='sport_dropdown',
        options=[{'label': i, 'value': i} for i in df.Sport.unique()],
        value=df.Sport.unique()),
    # Create empty Div container, which you can fill with everything!
    html.Div(id='your-plot-here')
])


@app.callback(
    # If you stuck to what those values belongs to,
    # you can specify them more in details:
    # Output(component_id='your_plot_here', component_property='children'),
    # instead of:
    Output('your_plot_here', 'children'),
    [Input('sport_dropdown', 'value')])
def update_output(selected_sport):
    """This function create age_vs_rank graph."""
    # selected_sport == value property from sport_dropdown id
    print(selected_sport)
    sport = df[df.Sport == selected_sport]
    rank = sport['Rank']
    age = sport['Age']
    # return what you want in empty Div container with id 'your_plot_here'
    return dcc.Graph(id='age_vs_rank',
                     figure={'data': [
                                     {'x': rank, 'y': age,
                                      'type': 'bar', 'name': 'age_vs_rank'}
                                      ],
                             'layout': {
                                        'title': 'Age vs Rank'
                                        }
                             }
                     )


if __name__ == '__main__':
    app.run_server(debug=True)
5
задан Gabriele Petronella 30 October 2013 в 06:42
поделиться

4 ответа

Никогда не полагайтесь сохраняют количества непосредственно. То, что произошло, - то, что во время процесса инициализации, некоторая часть кода имеет retainредактор и autoreleased объект. Поскольку Вы не можете сказать, сколько раз был объект autoreleased, Вы на самом деле не знаете то, что реальные сохраняют количество.

Сохраните количества, должен только использоваться в качестве помощи для отладки, никогда в качестве потока программного управления.

Пока Вы следуете всем правилам, размеченным в Руководстве по программированию управления памятью для Какао, у Вас не будет проблем.

20
ответ дан 18 December 2019 в 05:11
поделиться

Adam прав, что Вы не должны быть чрезмерно обеспокоены, сохраняют количества.

Но если у Вас когда-нибудь есть законная потребность в решении такой тайны, хорошая техника состоит в том, чтобы разделить пострадавший класс на подклассы именно так, можно добавить переопределения к методам управления памятью.

Например, в подклассе UIViewController, Вы могли реализовать:

- (id) retain
{
    // Break here to see who is retaining me.
    return [super retain];
}
43
ответ дан 18 December 2019 в 05:11
поделиться

Каков лучший способ выяснить, кто увеличил retainCount к 3?

Это приближается к проблеме от неправильного угла. Это смутит Вас и введет Вас в заблуждение (и вероятно правильное прошлое) фактическая проблема, когда действительно существует тот.

Лучше для размышления о том, кто владеет объектом. Вы намереваетесь иметь в наличии объект как значение одного из Ваших собственных свойств? Если так, затем Вы - один из его владельцев. В противном случае затем Вы не. Если Вы передаете объект другому объекту сохранить в одном из его свойств, то тот другой объект является также владельцем.

Эти владения являются просто отношениями, таким образом, действительно легко сохранить их прямо в Вашей голове.

  • “Это - один из моих контроллеров. Это владеет корневыми объектами моей модели, и один или несколько просматривает [контроллер] s”.
  • “Это - представление. Это владеет некоторыми частями моей модели”.
  • “Это - часть моей модели. Это владеет элементарными объектами только”.
  • “Это - другая часть моей модели. Это владеет некоторыми элементарными объектами и некоторыми другими битами модели”.

Если у Вас есть твердое схватывание Ваших владений, то Вы не можете записать утечку памяти кроме путем упущения a release или autorelease сообщение (который может произойти с любым), и Вы почти наверняка не запишете циклическое хранение (два объекта, сохраняющие друг друга) кроме сознательно и с обильными комментариями и #warnings.

Если Вы не разработали свои владения, то Вы, вероятно, записали одну или несколько утечек памяти или циклического хранения, о котором Вы не знаете.


Править: И отвечать на фактический вопрос, лучший способ выяснить, что сохранило — и, возможно, впоследствии автовыпустило — объект состоит в том, чтобы использовать инструмент Выделений Инструментов. С ним можно посмотреть на историю любого объекта видеть каждое выделение, сохранить, автовыпустить, выпустить, и освобождение его адреса.

8
ответ дан 18 December 2019 в 05:11
поделиться

Это не 100%-е решение, но Лязг LLVM, Статический Анализатор может быть большой справкой в разыскивании неправильного ручного использования управления памятью. Между Статическим Анализатором и MallocDebug, можно добраться, чтобы быть про при разыскивании проблем управления памятью очень быстро. BTW, даже при том, что Инструменты являются новой жаркостью, я нахожу MallocDebug намного более надежным.

Можно найти Лязг LLVM Статическим Анализатором здесь: LLVM/Clang Статический Анализатор

1
ответ дан 18 December 2019 в 05:11
поделиться