为任何移动设备编译时不推荐使用 TList
TList deprecated when compiling for any mobile device
我有一个 Delphi 移动应用程序,其中包含以下声明:
TWJInformationList = class(TList)
当我为任何移动设备(Android、iOS 32 位设备、iOS 64 位设备和 iOS 模拟器)编译此应用程序时,我得到以下警告:
[DCC Warning] WJInformation.pas(248): W1000 Symbol 'TList' is deprecated
以上在所有其他目标平台(32 位和 64 位 Windows 和 OSX)上编译良好。
我错过了什么?
在所有基于 ARC 的平台上,包括 Android、iOS、 和 Linux 1(不是移动平台),旧的基于 Pointer
的容器,如 Classes.TList
和 System.Contnrs
单元中的容器,已被弃用,因为它们使用起来不安全基于 ARC 的 object/interface 指针。您需要在 System.Generics.Collections
单元中使用较新的基于泛型的对应项,例如 TList<T>
,以便编译器可以正确管理 ARC。如果您不 want/need ARC 处理,TList
的直接替代将是 TList<Pointer>
。
1: 和 maybe Windows 在未来。
使用 Delphi 版本 10.4,System.Contnrs 似乎适用于所有平台
我有一个 Delphi 移动应用程序,其中包含以下声明:
TWJInformationList = class(TList)
当我为任何移动设备(Android、iOS 32 位设备、iOS 64 位设备和 iOS 模拟器)编译此应用程序时,我得到以下警告:
[DCC Warning] WJInformation.pas(248): W1000 Symbol 'TList' is deprecated
以上在所有其他目标平台(32 位和 64 位 Windows 和 OSX)上编译良好。
我错过了什么?
在所有基于 ARC 的平台上,包括 Android、iOS、 和 Linux 1(不是移动平台),旧的基于 Pointer
的容器,如 Classes.TList
和 System.Contnrs
单元中的容器,已被弃用,因为它们使用起来不安全基于 ARC 的 object/interface 指针。您需要在 System.Generics.Collections
单元中使用较新的基于泛型的对应项,例如 TList<T>
,以便编译器可以正确管理 ARC。如果您不 want/need ARC 处理,TList
的直接替代将是 TList<Pointer>
。
1: 和 maybe Windows 在未来。
使用 Delphi 版本 10.4,System.Contnrs 似乎适用于所有平台