在 iOS 以 ShowModal 顯示 Form 是否有 BUG ? |
尚未結案
|
Main Chen
高階會員 ![]() ![]() ![]() ![]() 發表:29 回覆:135 積分:127 註冊:2002-10-07 發送簡訊給我 |
在 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 發送簡訊給我 |
: )
沒試,但是不是可以改成 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 發送簡訊給我 |
|
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
嗯,如果一如你說的還是一樣。那這就叫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 發送簡訊給我 |
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 發送簡訊給我 |
|
Main Chen
高階會員 ![]() ![]() ![]() ![]() 發表:29 回覆:135 積分:127 註冊:2002-10-07 發送簡訊給我 |
感謝 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, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |