NSFileManager имеет метод для копирования.
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
В случае возникновения ошибки третий параметр (NSError **) при возврате будет содержать объект NSError, описывающий проблему.
Вопрос: нужно ли его выпускать?
Есть и другие методы, например, этот метод принимает (NSString **) ,
NSPropertyListSerialization +(NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
они следуют тем же правилам управления памятью?Отпускать или нет, вот в чем вопрос.
--- Ответ
Как сказал Андерс, ответ «не» выпускать.
Я запутался, потому чтоУ класса NSPropertyListSerialization есть метод
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
, в документе говорится, что я должен освободить третий аргумент, если не ноль.Однако он устарел и заменен на
+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error
, а аргумент (NSError **) сейчас.Не нужно выпускать, как другие подобные методы.Таким образом, в общем правиле управления памятью нет необходимости приводить аргументы такого рода.
--- Справочный документ
В Apple Расширенное руководство по программированию управления памятью , раздел You Donсобственные объекты, возвращаемые по ссылке:
Когда вы вызываете любой из этих методов, вы не создаете объект NSError, поэтому вы не являетесь его владельцем.