Должен ли я освободить объект NSError объекта copyItemAtPath NSFileManager: toPath: error :? - PullRequest
3 голосов
/ 27 августа 2010

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, поэтому вы не являетесь его владельцем.

Ответы [ 2 ]

5 голосов
/ 27 августа 2010

Возвращенный объект NSError является объектом с автоматическим освобождением, поэтому его не следует освобождать

Аргумент просто сообщает функции, куда поместить возвращенный объект ошибки (если есть)

EDIT: canпишется сегодня похоже

1 голос
/ 08 июля 2011
[NSPropertyListSerialization propertyListFromData:(NSData *) mutabilityOption:(NSPropertyListMutabilityOptions) format:(NSPropertyListFormat *) errorDescription:(NSString **)]

Если вы работаете с чем-то вроде этого, возвращается

(NSString **)

, тогда вам следует проверить документацию, в которой четко указано, требуется ли вам ее выпуск.Если в документации ничего не говорится о том, что вы освободили возвращаемый объект, например

- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error

, не беспокойтесь о них, они будут выпущены, когда это необходимо, или уже были автоматически выпущены фреймворком.

...