5 quick tips for removing ARC in Delphi Sydney

With the release of version 10.4 Sydney, Delphi has officially moved away from the ARC memory model in the mobile compilers. This was announced in 2018, there is some nice background info in this blog post by Marco Cantu.

So how do you do a quick check if your Delphi mobile code has ARC dependencies you should fix?

Tip #1 – Run on Windows with ReportMemoryLeaksOnShutDown := True

This instructs the FastMM memory manager to report memory leaks. Simply run your iOS or Android App on Windows (with the Windows Platform active), perform the usual actions an end-user would perform and close the application. Any memory leaks will be reported and should be fixed.

In your application source code add this line:

 
begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.CreateForm(TFormMain, FormMain);
  Application.Run;
end.

If you have a memory leak a message like this will popup after closing the application.

Unexpected Memory Leak

Tip #2 –  Search | Find In Files (Shift-Ctrl-F) for any “.Create” code

Most ARC (Automatic reference Counting) code should be changed to CTFF (Create Try Finally Free). Just check if there is a try-finally and a free directly after the .Create. Not all Create code needs a try-finally-free, as some instances are owned by their container, for instance in a TObjectList<T> that may take ownership of the instantiated object.

Change this ARC code

 
procedure DoSpellCheck;
var 
  Harry: TWizard;
begin
  Harry := TWizard.Create; 
  Harry.SpellCheck;
end; 

To this CTFF code

 
procedure DoSpellCheck; 
var 
  Harry: TWizard; 
begin
  Harry := TWizard.Create;
  try
    Harry.SpellCheck;
  finally
    Harry.Free;
  end;
end;

Some code can not be easily changed from ARC to CTFF, mostly due to the Free needing to be called at some unspecified time in the future, which for instance is common in multi-threaded code. If this applies to you then you could take a look at smart pointers in Spring4D using Shared.Make(TObject.Create), or take a look at the new custom managed records which where introduced in Delphi 10.4. Both options enable you to use ARC style freeing of resources, within the now default unified memory model.

Tip #3 – Use a tool to check for memory leaks

The code in tip #1 uses the built-in FastMM4 and is free. There is also a dual-license newer version FastMM5, both are however limited to Windows. Luckily there is a nice and simple free library called leakcheck that does this for all Delphi platforms. Alternatively, if detecting leaks in Windows only is preferred, the commercial DeLeaker has a lot of options and easy overview of memory leaks. A nice summary of these tools and more can be found in the blog post of Wagner Landgraf.

Tip #4 – Check for platform specific code

The short check for memory leaks under the Windows platform will skip platform specific code for Android and iOS, so you should check for compiler directive based platform dependencies {$IFDEF ANDROID}, {$IFDEF IOS}, but also for run-time dependencies like with TOSVersion.TPlatform.pfiOS and TOSVersion.TPlatform.pfAndroid. Note that the compiler directive AUTOREFCOUNT has been removed in Delphi 10.4, but its entirely possible you used this in your own code to check for ARC availablity.

Tip 5 – Check for weak references

These are mostly introduced to enable multiple references to instances without affecting reference count in combination with ARC. Do not just remove them, they can also be used for other reference counted data structures which may not have anything to do with ARC perse.

Even without ARC, reference counting still exists in Delphi. The compiler will still automagically reference count interfaces and strings. The same mechanism is also used for the new custom managed records.

RAD Studio 10.4 Sydney Webinar 16 juni 2020

View of Sydney Harbour

Barnsten organiseert een RAD Studio 10.4 webinar op 16 juni om 14:00 waarbij ik de mogelijkheid krijg om enkele van de nieuwe features van Delphi 10.4 wat uitgebreider te laten zien. Nu ben ik best blij met de nieuwe versie dus die kans laat ik niet voorbij gaan.

Onderwerpen zijn  de werking en voordelen van per control VCL Styling, het hoe en wat van de nieuwe Delphi Language Server Protocol server voor Code Insight en de ins en outs van Managed Records en het uitfaseren van ARC (Automatic Reference Counting) op de mobile platforms. Er zit nog wel meer in qua onderwerpen, maar die kom je vanzelf tegen als je het webinar volgt.

Meer info en inschrijven kan met deze link::

Ontdek RAD Studio 10.4 Sydney – Webinar 16 juni – 14.00 uur

Tot volgende week dinsdag bij de Q&A !

CodeRage 2018 – 4-6 December 2018

CodeRage 2018 is just around the corner!

CodeRage2018

CodeRage2018

The complete schedule:
https://www.embarcadero.com/coderage-2018

This CodeRage I’m showing you how to build microservices and how to consume them from desktop, Android mobile and using a HTML / JavaScript web app. The web app uses TMS WebCore and PAS2JS, but goes beyond basic coding as it also shows you how to convert the web app to a Progressive Web App, or PWA for short

The boilerplate code is of course available for download, please use it to jump start your own software.

Oh, and the nice thing about PWA, an Android device will offer the user the option to install the web app as an actual app with an icon on the start screen. Good stuff!

Register here, it’s free but infinite value for money:
https://www.embarcadero.com/coderage-2018

Delphi Meetup Web Development bij TMS op 12 juni 2018

Het is al bijna zover, de volgende Delphi Meetup. Dit keer in Wevelgem op het kantoor van TMS Software.

Bruno Fierens laat zien hoe je vanuit de Delphi IDE, met de Delphi taal en componenten, op een een RAD manier web user-interfaces kunt bouwen. Ook zie je hoe vanuit die Delphi web applicaties op eenvoudig bestaande Javascript libraries, zoals bijvoorbeeld jQuery, gebruik kan worden gemaakt van user-interface controls. Als laatste laat hij zien hoe dit samen met Delphi databinding te gebruiken is..

In aansluiting op de sessie van Bruno combineert Danny Wind in een use case een aantal technologieën om je te laten zien hoe eenvoudig het is om gebruik te maken van RADical Web. Danny zal een op REST gebaseerde micro-service back-end gebruiken en een  front-end die zowel RADical Web als Apps (Android/iOS) gebruikt. En dit alles gewoon met Delphi Code!

Meer info vindt je hier:
https://www.barnsten.com/nl/events/details?events_id=323

Delphi 10 Tokyo Update and Firemonkey-Android Power training March-2018

On March 8th and 9th we have the Delphi 10 Tokyo Firemonkey and Android Power training planned in Etten-Leur in the Netherlands. In just two days you will learn how to develop an Android App in Delphi, with high level features in the GUI down to high tech stuff when interacting with the Java side. This training is available in both English and Dutch. Registration can be found here.

A week after, on March 15th and 16th, we have the Delphi 10 Tokyo Update training in our agenda. As one of the previous attendees told me a couple of weeks after attending this training “I’ve learned so many new things in these two days; I especially liked the (PPL) TTasks chapter”. This one is only available in Dutch, registration can be found here. Note: due to a conflict in planning with an on-site training this open training has been moved to April 19th and 20th.

Delphi 10 Update Training – 14 en 15 december 2017

Ben je al wat langer met Delphi bezig, kom dan naar de Delphi 10 Update Training om je kennis op te vijzelen met de nieuwe features en mogelijkheden.

Op donderdag 14 en vrijdag 15 december 2017 stomen we je klaar voor al je goede Delphi voornemens in 2018 met de mooiste, belangrijkste en nuttigste onderwerpen behandelen die Delphi erbij heeft gekregen sinds Delphi 2010.

We behandelen in deze twee dagen heel veel Delphi onderwerpen; Unicode, FireDAC, Parallel Programming (PPL), FireMonkey, Livebindings, maar ook advanced language features zoals Generics en anonymous methods.

Er is ook ruimte voor eigen inbreng en vragen. Heb je interesse in Interbase ChangeViews bijvoorbeeld, dan kunnen we dat ook behandelen.

Meer info en inschrijven voor kan hier.

Delphi “The LAB” – 19 september 2017

Er komt een mooi evenement aan met de prachtige gelegenheid om rustig te spreken met de presenters van het evenement in “The LAB”.

Neem de tijd om bij een kopje koffie te praten met elk van de presenters in het restaurant van het Evoluon, maar volg ook de interessante sessies van sprekers als Jens Fudge, Andrea Magni, Bob Swart en David Millington. Vergeet ook de CurieWise C++ Builder sessie van Ludo Stroetenga niet.

Mijn sessie op dit seminar gaat over het oppeppen van bestaande Delphi VCL applicaties. Verplaats de gehate zandloper naar TTasks, poets je User Interface op met fraaie controls en gebruik enkele nieuwe technieken om je code indrukwekkend sneller te maken. In “The LAB” heb je ook nog eens uitgebreid de tijd om me vragen te stellen over het gebruik van TTask, User Interfaces of over het maken van een goede espresso.

The LAB, where you get to spend time with Delphi presenters

The LAB

PDF met de sessies:
https://www.barnsten.com/media/factsheet/Agenda_The_LAB.pdf

Inschrijven kan hier:
http://embt.co/2udBG5p

Delphi 10.1 Berlin Firemonkey en Android Training

Op donderdag 24 en vrijdag 25 november is er een Delphi 10.1 Berlin Firemonkey en Android training.

Ben je al ervaren in Delphi met de VCL, maar wil je verder met multi-platform (OSX, iOS, Android) dan is deze combinatie FireMonkey Power en Android App training misschien iets voor jou. Leer in 2 dagen het FireMonkey framework en Android app development kennen.

Meer info vindt je hier:

Delphi 10.1 Berlin FireMonkey en Android

En inschrijven kan via Barnsten:

https://www.barnsten.com/nl/development-tools/training/delphi-android-training

Delphi Berlin For Free

Did you know you can use Delphi for free with the free Delphi Berlin Starter edition? If you want you can get started right know:
https://www.embarcadero.com/products/delphi/starter/promotional-download

If you are a hobbyist, a student or just starting your own development, the Starter Edition is just fine. You can develop serious Windows desktop software with this version, as it includes a lot of the features you need, such as support for HTTP(S) requests including JSON and BSON that would allow you to consume WebServices. It even includes FMX, so you could start building visually stunning stuff with DirectX accelerated GUI graphics. Looking at the complete feature set will give you an idea of what’s possible out of the box, and although not mentioned here the ClientDataset in-memory table is actually part of Delphi Starter:
https://www.embarcadero.com/docs/rad-studio-berlin-feature-matrix.pdf

Daniel Wolf did some research on what you can do with the Starter Edition; his conclusion was that you could write software for an airport with Delphi Starter. Read his nicely detailed article here.

And don’t forget, this edition allows you to use and install third-party components as well. And there are a lot of Delphi Components out there.

Delphi 10 Seattle training begin 2016

Nieuwsgierig geworden naar Delphi 10 Seattle en je wilt ermee beginnen? Dan is de Delphi 10 Seattle VCL Essentials training op 27, 28 en 29 januari misschien iets voor jou. In 3 dagen leer je als ontwikkelaar Delphi kennen en gebruiken.

Ben je al ervaren in Delphi met de VCL, maar wil je verder met multi-platform (OSX, iOS, Android) dan is de combinatie FireMonkey Power en Android App training op 17 en 18 februari misschien iets voor jou. Leer in 2 dagen het FireMonkey framework en Android app development kennen.

Op 3 maart in Edegem (België) top je dan je kennis af met het Delphi praktikum voor ervaren Delphi ontwikkelaars. Mobile app do’s en don’ts, een stukje parallel coding en de benodigde REST based servers als backend. Een complete set aan kennis voor Delphi developers.

En heb je nog Delphi projecten die je over wilt zetten naar Delphi 10 Seattle, dan is de Unicode en BDE Migratie training wellicht interessant. Hierin code snippets voor effectieve Unicode omzetting en introductie van tools voor de BDE Migratie. Deze training is gepland op 11 maart.

Details en inschrijving via: http://www.barnsten.com/nl/events/details?events_id=188