Obviously, this is always a compromise between memory / speed / size. This means that you mentioned the same methods that I personally use. This is how I see them:
[PNG images] (for speed) and [JPEG images] (for memory / size)
[SQUARE images] (for size) and [INDIVIDUAL images] (for memory / speed)
[UNIVERSAL images] (for size) and [INDIVIDUAL images] (for memory / speed)
[CROP images] (for memory / size) and [REGULAR images] (for speed)
[STREAMS] (for size) and [TURN ON IMAGES] (for memory / speed)
As for the image package, Xcode does its own compression and deletion of data. However, I have not heard much about how effective it is. I personally just open everything in Preview and save again to check if there can be less.
Method number one (only if possible, obviously) most definitely uses stretchable images, either fitting them to borders, or using stretchableImageWithLeftCapWidth: topCapHeight: (but, unfortunately, this is usually not an option, only for border / gradient background)
source share