Have a similar problem. Here's what I've used till now.
I have 2 arrays, one comprised of the possible collectibles to be spawned randomly and another comprised of the empty tiles (where a spawning can occur).
The problem is that the game is an iOS game and the way I update the contents of the empty tiles array is cpu-intensive and the game is pretty much unplayable at the moment.
If you're targeted to pc/mac/web though, this method works fine.