This makes me feel old, but lately I've been seeing misunderstandings about what autorelease actually is in objc/swift. "It's a GC", "it's weird magic", "it's a batch allocator", etc…
Autorelease is just an array. You (or, 99% of the time, SDK methods you're calling) manually put things into the array by calling `autorelease` on them, and then when you reach the closing brace of the autoreleasepool {} block, it calls `release` on anything that was added.
That's literally all it is.