The CGSize can only be estimated when you don't know the exact characters of the string. A worst-case estimation would possibly be to fill the whole string with "M" or "W" characters, cause I think this should be widest char in most fonts:
int charCount = 10;
NSString *testString = @"";
for (int i = 0; i < charCount; i++) {
testString = [testString stringByAppendingString:@"M"];
}
You could also estimate the best-case by adding "i"-chars. You should do a lot of testing to find the character that results best in most cases.