2015-01-20 8 views
0

Я создаю «скремблер», который принимает текстовый массив и массив изображений, а затем вычисляет кросс-продукт как твиты. Функция, что я волнуюсь выглядит следующим образом:Будет ли утечка памяти ember, если я создам модель в вычисленном свойстве?

combinations: (-> 
    tweet_texts = @get('tweet_texts') 
    tweet_images = @get('tweet_images') 

    # return empty array unless we have texts 
    return Em.A([]) unless tweet_texts.length 

    # handle the case when we don't have images 
    unless tweet_images.length 
    combinations = tweet_texts.map (text) => 
     TwitterPost.create 
     text : text 
     newtwork_user : @get('account.twitter_handle') 
    return Em.A(combinations) 

    # handle texts and images 
    combinations = tweet_images.map (image) => 
    tweet_texts.map (text) => 
     TwitterPost.create 
     text : text 
     image : image 
     network_user : @get('account.twitter_handle') 
    return Em.A([].concat(combinations...)) 
).property('[email protected]','[email protected]') 

Меня беспокоит то, что я создаю много моделей, и я не очень понимаю, вывоз мусора Эмбера.

Итак, я могу рискнуть создать утечку памяти здесь?

Спасибо!

ответ

1

Ember не осуществляет никакой сбор мусора. В нескольких случаях, связанных с DOM, он удаляет ссылки на элементы, чтобы убедиться, что это мусор.

Ember не создает никакой глобальной ссылки на объекты, созданные с использованием Foo.create(). Таким образом, в тот момент, когда больше нет ссылок на объект, и ваш браузер решает, что он настроен на сбор, он будет собран.

Сделать это вычисленным свойством аналогично тому, как сделать его собственностью на любом объекте. В тот момент, когда объект больше не ссылается, он будет помечен для коллекции, и свойства будут следовать.