The first code snippet uses the autorelease pool, thus will be released automatically after releasing the last created autorelease pool.
Every app has one autorelease pool by default, created in the main.m file.
But to release objects created with "autorelease" as soon as possible it's recommended to create and release further autorelease pools, i.e. in the init methods of every object.
Daniel has created the macro SP_CREATE_POOL(pool) and SP_RELEASE_POOL(pool), so it's not much work to make use of additional autorelease pools.
So perhaps you check your code for this and test it again.
And notice: If there is only one more retain as an release, the object stays in memory, though the rest of the level is removed. From time to time I have made such mistakes, but sooner or later have found the culprit.