Theoretically infinite, but in reality it's probably limited to 10-20 max. So just create them dynamically at runtime - when you find you need a cell with 3 labels, you assemble the string @"ReuseID3" and build the cell and put it in that pool. If you find a need for a 7 label cell, then you use @"ReuseID7"...etc.

Not too difficult to implement. I use the exact same strategy in my apps.