Eu uso a seguinte abordagem para criar um quadro para uma imagem uii em meus aplicativos. Através dessa abordagem, não é necessário usar dois UIImageViews separados, o que significa menos objeto vivo. Isso é especialmente importante para problemas de desempenho de células personalizadas em UItableViews.
+(UIImage*)maskAnImageWithFrame:(UIImage*)originalImage
{
UIImage *frameImage = [UIImage imageNamed:@"Frame.png"];
UIGraphicsBeginImageContext(frameImage.size);
[attachmentImage drawInRect: CGRectMake(0,0, frameImage.size.width, frameImage.size.height)];
[frameImage drawInRect: CGRectMake(0,0, frameImage.size.width, frameImage.size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}