Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.02.2011, 19:26
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 1  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
Question Объекты удалены, а профайлер показывает, что они еще висят в памяти?! :(

Значит структура классов такова, из Controller в UI_Connection, из UI_Connection в UI_NewGame, но вопрос чуток в другом.

Смотрю на примере Комбобоксов. "из Controller в UI_Connection" - их нету на рабочей области, профайлер показывает, что их действительно нету в памяти, - все ок.

Потом "из UI_Connection в UI_NewGame" - появились на сцене 3 комбобокса, профайлер показывает, что они есть - все ок.

потом вот что делается в классе "UI_NewGame" - там кнопочка при нажатии на которую осуществляется коннект и передается управление классу Constructor который все удаляет и создает новый обьект.

НО! Все элементы интерфейса лежат в памяти. Почему?


Вот структура класса - там ничего сложного посмотрите пож
Код AS3:
package  
{
	import fl.controls.Button;
	import fl.controls.ComboBox;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.NetConnection;
	import flash.events.NetStatusEvent;
	import flash.text.TextField;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	/**
	 * ...
	 * @author webdev
	 */
	public class UI_NewGame extends MovieClip 
	{
		private var anFrame:MaskFrame;
		private var cont:Sprite;
		private var btn_Create:Button;
		private var _uiConnection:UI_Connection;
		private var _controller:Controller;
		private var comboSpCount:ComboBox;
		private var comboSpStake:ComboBox;
		private var comboSpStartGeld:ComboBox;
		private var array:Array = new Array(3);
		private var netCon:NetConnection;
		private var _fmsConnection:FMS_Connect;
		private var urlName:String;
		private var appName:String;
 
		public function UI_NewGame(_uiConnection:UI_Connection, _controller:Controller, urlName:String, appName:String) {
			trace("<--UI_NewGame::UI_NewGame-->");
			this._controller = _controller;
			this._uiConnection = _uiConnection;
			this.urlName = urlName;
			this.appName = appName;
			setInterface();
			}
 
		private function setInterface():void {
			trace ("func___setInterface");
			cont = new Sprite();
			setFrame();
			}
 
		private function setFrame():void {			
			trace("func___setFrame");
			this.anFrame = new MaskFrame();
			this.addChild(this.cont);
			this.anFrame.x = 50;
			this.anFrame.y = 200;
			this.cont.addChild(this.anFrame);
 
		    var timer:Timer = new Timer(1400, 1);
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, comboSpCnt);
			}
 
		private function comboSpCnt(event:TimerEvent):void {
			trace("func___comboSpCount");
 
			comboSpCount = new ComboBox();
			this.comboSpCount.x = 125;
			this.comboSpCount.y = 217;
 
			comboLabel(100, 200, "Waehle die Anzahl der Spieler");
			for (var i:int = 2; i <9; i++) {
				this.comboSpCount.addItem({label:i, data:i});				
			}
 
			this.cont.addChild(this.comboSpCount);
 
			var timer:Timer = new Timer (400, 1);
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, comboSpSt);
			(event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpCnt);
			}
 
		private function comboSpSt(event:TimerEvent):void {
			trace("func___comboSpStake");
 
			this.comboSpStake = new ComboBox();
			this.comboSpStake.x = 125;
			this.comboSpStake.y = 352;
 
			comboLabel(100, 335, "Waehle den maximalen Einsatz $");
			for (var i:int = 1; i <=10; i++) {
				this.comboSpStake.addItem({label:i, data:i});				
			}
 
			this.cont.addChild(this.comboSpStake);
 
			var timer:Timer = new Timer (400, 1);
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, comboSpStGeld);
			(event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpSt);
			}
 
		private function comboSpStGeld(event:TimerEvent):void {
			trace("func___comboSpStartGeld");
 
			this.comboSpStartGeld = new ComboBox();
			this.comboSpStartGeld.x = 125;
			this.comboSpStartGeld.y = 482;
 
			comboLabel(100, 465, "                  $ Max");
			for (var i:int = 1; i <=5; i++) {
				this.comboSpStartGeld.addItem({label:i, data:i});				
			}
 
			this.cont.addChild(this.comboSpStartGeld);
 
			var timer:Timer = new Timer (400, 1);
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, btn_NewGame);
			(event.target as Timer).removeEventListener(TimerEvent.TIMER, comboSpStGeld);
			}
 
		private function btn_NewGame(event:TimerEvent):void {
			trace ("func___btn_NewGame");
			this.btn_Create = new Button();
			this.btn_Create.label = "Create";
			this.btn_Create.x = 125;
			this.btn_Create.y = 620;
			this.cont.addChild(this.btn_Create);
			this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk);
			(event.target as Timer).removeEventListener(TimerEvent.TIMER, btn_NewGame);
		}
 
		private function comboLabel(_x:int, _y:int, str:String):void {
			trace ("func___comboLabel");
			var label:TextField = new TextField();
			label.x = _x;
			label.y = _y;
			label.textColor = 0xFFFFFF;
			label.width = 150;
			label.text = str;
			this.cont.addChild(label);
		}
 
		private function btn_Create_clk(event:MouseEvent):void {
			trace ("func___btn_Create_clk");
			this._fmsConnection = new FMS_Connect(urlName, appName);
			this.netCon = this._fmsConnection.connecting();
			this.netCon.addEventListener('netStatus', netStatusHandler);
			}
 
		private function netStatusHandler(event:NetStatusEvent):void {
			trace("func___netStatusHandler");
			if (event.info.code == "NetConnection.Connect.Success") 
				setConnected();
			else 
				_uiConnection.setError();
		}
 
		private function setConnected():void {
			trace("func___setConnected1");
			eventRemove();
			this._controller.uiLogIn();
		}
 
		private function eventRemove():void {
			trace("function___eventRemove");
			this.netCon.removeEventListener('netStatus', netStatusHandler);
			this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk);
 
	        }
Вот функции из контроллера.
Код AS3:
 
		public function uiLogIn():void {
			trace("func___uiLogIn");
			destructor();
			_uigame = new UI_Game();
			this.addChild(_uigame);
			}
 
		private function destructor():void {
			trace("func___destructorC");
 
			while (numChildren)
				removeChildAt(0);
		}
Огромное спасибо за подсказку, и вообще - я правильно передаю управление приложением обратно????

Старый 01.02.2011, 19:39
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Очень много в коде лишнего. Почистите. Оставьте одно что-то, зачем все. Из-за этого так сразу и не видно - вы слушатели отписываете? А ссылки зануляете? А вообще, они так и будут висеть в памяти (если все сделано правильно), пока не придет товарищ GC.
__________________
тут я

Старый 01.02.2011, 19:53
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 3  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
Ну я так.. для наглядности, в смысле лишнего, вы имеете введу, что тяжело разобраться по сути?
Если по сути, то последние функции, создание комбобоксов ни к чему... Нет ссылки не зануляю, вот.. уже подсказали, делаю. Может че и получится после зануления.

Старый 01.02.2011, 19:58
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Да не тяжело, но это нужно не "пробежаться глазами", а именно "просмотреть", что отнимет больше времени. Да и большинству будет лень. От слушателей тоже отписывайтесь.
__________________
тут я

Старый 01.02.2011, 20:03
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 5  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
да, вот доделал, обнулил, запустил в конце GC результат таков же, - висит в памяти.
Напомню, структура такова. из Controller в UI_Connection, из UI_Connection в UI_NewGame,
Из класса Controller

Код AS3:
private function destructor():void {
		trace("func___destructorC");
		_uiconnect.destroy();
		while (numChildren)
			removeChildAt(0);
	}
из класса UI_Connection
Код AS3:
public function destroy():void {
	trace("func___UIDestroy");
	_uiNewGame.destroy();
}
из класса
UI_NewGame
Код AS3:
public function destroy():void {
		trace("function___destroy");
		this.netCon.removeEventListener('netStatus', netStatusHandler);
		this.btn_Create.addEventListener(MouseEvent.CLICK, btn_Create_clk);
		this.comboSpCount = null;
		this.comboSpStake = null;
		this.comboSpStartGeld = null;
		this.btn_Create = null;
		this.cont = null;
	}
Добавлено через 1 минуту
да, от слушателей тоже отписываюсь, специально не ставил никакие слушатели на эти комбобоксы, чтоб на них проверить.

Старый 01.02.2011, 20:09
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
А как же удалять из отображения кнопки и комбобоксы?
__________________
тут я

Старый 01.02.2011, 20:12
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 7  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
Вот, цикл в конструкторе делает
Код AS3:
while (numChildren)
			removeChildAt(0);
или он на самом деле не делает?

Старый 01.02.2011, 20:13
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 8  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
А gc, может и вовсе не прийти, если флешка мало памяти съела.

Старый 01.02.2011, 20:19
Killer_13 вне форума Посмотреть профиль Отправить личное сообщение для Killer_13 Найти все сообщения от Killer_13
  № 9  
Ответить с цитированием
Killer_13
 
Аватар для Killer_13

Регистрация: Jan 2007
Сообщений: 302
все удаляет, только что проверял.
Хммм, ну как так тогда, элементы из сцены удалились, потом я их занулил, функция вызывается 100%! тоисть зануление делается, никакие события на комбобоксы не повешены. Я сейчас на другие элементы интерф не смотрю, так как главное чтоб один заработал, а остальные я сделаю.

Старый 01.02.2011, 20:23
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 10  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Нужно удалить не контейнеры с кнопками, а именно сами кнопки, потом занулить на них ссылки, потом удалить контейнеры, занулить ссылки на них. Вот тогда НКВД г-н GC и заберет в места заключения все ненужное.
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:21.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.