Delphi TThread под ARC (iOS) не выпускается

Как правильно завершить поток с помощью Delphi для iOS под управлением ARC?

Возьмите этот простой пример:

  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  public
    destructor Destroy; override;
  end;

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    FThread: TMyThread;
  public
  end;

{ TMyThread }
destructor TMyThread.Destroy;
begin

  ShowMessage('Destroy');

  inherited Destroy;

end;

procedure TMyThread.Execute;
begin

  Sleep(5000);

end;

{ TForm2 }
procedure TForm2.Button1Click(Sender: TObject);
begin
  FThread := TMyThread.Create(TRUE);
  FThread.FreeOnTerminate := TRUE;
  FThread.Start;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  ShowMessage(FThread.RefCount.ToString);
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  FThread := nil;
end;

Хорошо, нажатие кнопки 1 порождает поток. После запуска потока, если вы нажмете кнопку 2, он будет отображать значение RefCount 3 !! Ну, 1 - это ссылка на мою переменную FThread, и есть 2 дополнительные ссылки, которые TThread создает внутри ... Я покопался в исходном коде и обнаружил, что RefCount здесь увеличен:

constructor TThread.Create(CreateSuspended: Boolean);

  ErrCode := BeginThread(nil, @ThreadProc, Pointer(Self), FThreadID);
  if ErrCode <> 0 then
    raise EThread.CreateResFmt(@SThreadCreateError, [SysErrorMessage(ErrCode)]);
  {$ENDIF POSIX}

И здесь:

function ThreadProc(Thread: TThread): Integer;
var
  FreeThread: Boolean;
begin
  TThread.FCurrentThread := Thread;

Хорошо ... После завершения потока (В моем случае, через 5 секунд) RefCount уменьшится до 2 (потому что я установил FreeOnTerminate в TRUE, но если я не установил FreeOnTerminate в TRUE, RefCount все равно будет 3 ).

Видишь проблему? Поток никогда не заканчивается и деструктор никогда не вызывается, если я вызываюFThread := nilто RefCount должен уменьшиться с 2 до 1 (или с 3 до 2 в случаеFreeOnTerminate = FALSE), и поток никогда не выпускается под ARC ...

Может быть, я что-то упустил, потому что я привык работать с потоками без ARC ... Итак, что мне здесь не хватает? Или есть ошибка в реализации TThread под ARC?

Может быть, это определение TThread

private class threadvar
  FCurrentThread: TThread;

должно быть что-то вроде

private class threadvar
  [Weak] FCurrentThread: TThread;

Ответы на вопрос(1)

Ваш ответ на вопрос