Возьмите приведенный ниже пример:
- (NSString *)pcen NS_RETURNS_RETAINED {
    return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef) self, NULL, (CFStringRef) @"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
}
Правильно ли там поставить NS_RETURNS_RETAINED?
Другой пример:
+ (UIImage *)resizeImage:(UIImage *)img toSize:(CGSize)size NS_RETURNS_RETAINED {
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
    [img drawInRect:...];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resizedImage;
}
Это кажется более сложным, так как возвращаемый UIImage является результатом метода Get. Тем не менее, контекст графики, из которого он был получен, был создан в рамках метода, так же верно и здесь NS_RETURNS_RETAINED?
И третий пример:
@property (readonly) NSArray *places;
---
@synthesize places=_places;
---
- (NSArray *)places {
    if (_places)
        return _places;
    return [[NSArray alloc] initWithObjects:@"Unknown", nil];
}
Не знаю, что делать здесь, поскольку возвращаемый объект может быть вновь создан или нет.
И последний вопрос; предположительно NS_RETURNS_RETAINED не требуется, если возвращенный объект является результатом метода autorelease'ed. Поэтому скажем, что возврат в последнем примере был изменен на
 return [NSArray arrayWithObject:@"Unknown"];
что было бы лучше всего?