I wouldn’t worry about it that much, but if you do care about this, then you should do neither, not in Tick or any similar manner anyway.
Try to always use cached references instead of constantly finding/casting the object you wanna access. For instance in most of my classes, I have an object called MyPC, which stores a reference to my player controller. In Hud I have an additional MyPlayer, and also in my player BP and any other object that I need to access hud constantly, I have a MyHud reference. You can do this for any number of objects you frequently access from a class, but these are the most used ones usually. (If you wanna keep it super small, you can always only have one cached reference, MyPC, and access anything else through that, but I wouldn’t suggest it for things like Hud that is likely to be accessed too frequently)
The thing to remember though, is you should carefully manage filling/updating those references. For instance whenever the player dies or maybe you switch between pawns for the player, IF you have a MyPlayer reference in a class, you have to update it with the new pawn otherwise it’ll be invalid.
As for filling it the first time, you can most of the time use BeginPlay event, but not always. You can also use ExposeToSpawn for objects that you spawn in realtime, like special projectiles.
As a bonus also, using cached references instead of constantly casting or using an interface is that your graph becomes less crowded.