線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2446
推到 Plurk!
推到 Facebook!

在 iOS 以 ShowModal 顯示 Form 是否有 BUG ?

尚未結案
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-05-06 10:10:34 IP:112.104.xxx.xxx 訂閱
在 Form1 去 Form2.ShowModal; 執行在 Win32 & iOSSimulator 沒有問題, 但執行在實機
iPhone 3GS: 連續開啟第 45 次就會閃退
iPad 1: 連續開啟第 8 次就會閃退
如果在 Form2 放一張 Image 大圖, 則會更快閃退, 我猜想應該是 Form2 並沒有真正被釋放, 不知道是不是 iOS 需要特殊寫法? 還是 BUG ?

---------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenCount := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(nil);
Inc(OpenCount);
Form2.CaptionLabel.Text := IntToStr(OpenCount);
Form2.ShowModal;
Form2.DisposeOf;
// FreeAndNil(Form2); // 改用這行也會閃退
end;
---------------------------------------


---------------------------------------
Form2 沒有一行程式:
---------------------------------------
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.StdCtrls;
type
TForm2 = class(TForm)
TopToolBar: TToolBar;
CaptionLabel: TLabel;
CancelButton: TButton;
OkButton: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
end.
---------------------------------------
編輯記錄
Main Chen 重新編輯於 2013-05-06 10:50:35, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-05-06 15:30:09 IP:114.32.xxx.xxx 訂閱
 : )
沒試,但是不是可以改成
Var
foo : TForm2;
..........
//Form2.DisposeOf; 不用
//freeandnil…不用

再試一下呢?!

ps 我的beta已過期,也還沒時間去裝試用版。
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2013-05-06 15:31:09, 註解 無‧
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-05-06 17:38:44 IP:122.116.xxx.xxx 訂閱
 我試過了, 還是一樣.

如果不要釋放, 改用下面方式, 就沒問題, 不過我的 Form 一多的話, 還是會有記憶不足的問題:

begin
if not Assigned(Form2) then
Form2 := TForm2.Create(nil);
Inc(OpenCount);
Form2.ShowModal;
end;

這是很基本的功能,我一直在想,應該不會只有我這個問題吧?
編輯記錄
Main Chen 重新編輯於 2013-05-06 20:08:54, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2013-05-07 02:25:40 IP:114.42.xxx.xxx 訂閱
嗯,如果一如你說的還是一樣。那這就叫bug了!  我蠻肯定這是bug。

因為foo它不是全域的變數,根據ARC的方針,這個變數一離開function外面就該自動被ARC處死。這有別於你一開始用Form2,因為它是全域的,且開始就被「指向已生成的物件」,除非最一開始自動生出的Form2這個物件被釋放,否則會一直掛著…釋放不了…

用區域變數 動態生成 form,結果釋不出來就是bug。故改成我那樣還不能釋放…算是bug!

這也是我上一封回你時一開始就「微笑」的地方… 不知是否可能體會? :p



===================引 用 Main Chen 文 章===================
我試過了, 還是一樣.


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2013-05-07 05:56:39 IP:122.116.xxx.xxx 訂閱
procedure TForm1.Button1Click(Sender: TObject);
var foo: TForm2;
begin
foo := TForm2.CreateForm(nil);
foo.CaptionLabel.Text := foo.RefCount.ToString; // 找到有人寫過 QC #112614 不過 Status: Closed 不知道有沒有修正了?
http://qc.embarcadero.com/wc/qcmain.aspx?d=112614

目前暫時以不釋放 Form 來解決, 至少還在可以接受的範圍.
編輯記錄
Main Chen 重新編輯於 2013-05-07 08:36:51, 註解 無‧
qcom
版主


發表:79
回覆:114
積分:43
註冊:2011-05-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2013-05-07 16:00:35 IP:61.219.xxx.xxx 訂閱
1. 這是個 regression bug, 已通知EMBT R&D , 他們會儘快修復.

2.在iOS請避免使用TForm, 因TForm is too heavy for iOS, 應使用 TabControl 與 TFrame 代之.
Main Chen
高階會員


發表:29
回覆:135
積分:127
註冊:2002-10-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2013-05-07 17:05:58 IP:122.116.xxx.xxx 訂閱
感謝 qcom 能回報這個問題給 EMBT

難怪我在 Sample 裡都找不到有開第二個 Form 的範例.

不過要做跨平台, 避免不了使用 TFrom, 我有很多 Form 是跨平台共用, 所以還是等修正後再試試了.

===================引 用 qcom 文 章===================
1. 這是個 regression bug, 已通知EMBT R&D , 他們會儘快修復.

2.在iOS請避免使用TForm, 因TForm is too heavy for iOS, 應使用 TabControl 與 TFrame 代之.
編輯記錄
Main Chen 重新編輯於 2013-05-07 17:20:50, 註解 無‧
系統時間:2024-05-05 5:36:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!