
📱iOS Principal @PeYaTech | Prev: @paypal - @venmo / @Mercadolibre - @Mercadopago / @letgo / @olxtecharg / @globant / 🚀 Building: @stunyapp 🎸🎹
Buenos Aires, Argentina
Joined July 2009
- Tweets6.9K
- Following1.3K
- Followers1.5K
- Likes11.8K
Pinned Tweet
Algunas 📸 de ayer en la Meetup iOS de @PeYaTech ! Increíble evento. Excelentes oficinas / @iNahuelZapata @JonUrq @jsotuyod
Juan Sanzone retweeted
Sabes por qué no conseguiste entrada para la despedida de Messi contra Benin?
Sabes por qué la entrada no es digital y te hacen ir a retirarla física?
Por la caja negra de la AFA y el Chiqui Mafia que reparte entradas entre sus punteros.
Juan Sanzone retweeted
Here's how Swift uses your hardware to guarantee actor isolation 👷
When you run work on a Swift actor, it doesn't execute immediately: it has to be drained onto the co-operative thread pool.
Actors are backed by a private internal linked list of incoming jobs. The scheduleActorProcessJob function in the runtime creates a ProcessOutOfLineJob to “drain” the actor, where the jobs in the linked list are dequeued, prioritised, and executed. (screenshot #1)
swift_task_enqueueGlobal is the ultimate runtime call which hands the job off to the global concurrent executor, where the platform’s cooperative thread pool places them on a thread. On Apple platforms, this is libdispatch.
ProcessOutOfLineJob is a small object allocated separately from the default actor. It registers the process method, which is invoked as the entry-point of job execution. It’s called when the job begins running on a worker thread in the cooperative thread pool. (screenshot #2)
This process method drains the job queue in the default actor. (screenshot #3)
Remember that that the default actor contains two queues: the “incoming” queue, implemented by a linked list, and the “executing” priority queue, where they are bucketed by priority and executed.
defaultActorDrain is where the linked list of incoming jobs is processed into this priority queue, and jobs are finally executed one-by-one. (screenshot #4)
To drain the queue safely, atomic CAS is used to place a lock on the default actor by setting the state machine to running. Then, in a loop, a job is taken from the existing priority queue (if any exists) and executed on the executor context, through runJobInEstablishedExecutorContext.
At the end of the loop, processIncomingQueue places any jobs from the linked list of incoming jobs into the priority queue. The drain continues, in a loop, until all the queued work is complete. When no incoming jobs remain, and they’ve all been executed, the actor unlocks and the loop completes.
Recall that process was scheduled on the global concurrent executor.
This drainer job is tail-called at the end of the process function, and executes all the jobs in this context via runJobInEstablishedExecutorContext. This means the work queued on the actor is all performed serially on the same cooperative thread pool thread, until the drain is finished.
I literally went all the way through the source code to understand how actors actually work. It was exactly as fun as it sounds. 🕴️ blog.jacobstechtavern.com/p/…
Juan Sanzone retweeted
SwiftUI's List loads row views lazily, creating content only for rows near the visible region. For this to work, SwiftUI needs to be able to determine the number of views a ForEach element resolves to without evaluating the closure.
Two common patterns prevent this:
- Using an `if` statement inside ForEach changes the number of views per element, so SwiftUI has to evaluate every closure upfront to get the count.
- Wrapping rows in AnyView hides the type information SwiftUI needs to determine the view count, with the same result.
In both cases, SwiftUI ends up evaluating the ForEach closure for every element in the collection before any rows are displayed.
You can learn more about maximizing the performance of dynamic lists in SwiftUI and common pitfalls from the sample chapter of my book "The SwiftUI Way". You can read it for free here: books.nilcoalescing.com/the-…
Juan Sanzone retweeted
SwiftUI Agent Skill 3.0.0 just released!
It can now parse xctrace data from Time Profiler, hangs, animation hitches, and SwiftUI traces, correlate issues with main-thread samples, and turn the whole firehose into JSON + Markdown an agent can actually reason about.
Huge credit to @polpielladev for shipping the parser 🙌
Ready to make your SwiftUI app faster?
Ni siquiera prendi el auto el 18 de Febrero.Estuve laburando TODO EL DIA! Esto me pasa seguido con Autopistas urbanas. Mas alla de reclamar, alguien sabe como se puede hacer para obligarlos a que al menos en el estracto de la transaccion pongan la patente del auto o alguna traza?
... but you have to implement it well... As newbie one shot will likely fail and be full of bugs.. You need a deep understanding of view identity, correct state management and how to avoid unnecessary re rendering... this isn’t easy in one shoot.
Vendo MacBook Pro M1 14’ - Impecable estado!!! - 16GB ram / 1TB hd / 16gb RAM / Bateria 94% max capacity / 129 ciclos
Juan Sanzone retweeted
Si alguien de la comunidad, tiene a alguna empresa que pueda poner lugar, nosotros hacemos el resto
si loco. SwiftBA en si esta medio deprecadado porque @marcosgriselli ya no esta en Arg y el la organizaba. Pero con @iNahuelZapata estamos queriendo reactivar la comunidad. Seguro este mes organizamos algo. Estamos viendo sede…
El limite el no pelear con el framework. Todo lo demas es sarasa. Hay contextos y contextos. Pero el limite siempre es.. estas pelearndo con el fwk? entonces. no!



































