yeh*_*nan 3 cocoa cocoa-touch memory-management
NSFileManager有一个复制方法.
- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
如果发生错误,返回时的第三个参数(NSError**)将包含描述问题的NSError对象.
问题:我需要发布它吗?
还有一些其他方法,例如这个方法(NSString**),
NSPropertyListSerialization +(NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
Run Code Online (Sandbox Code Playgroud)
他们遵循相同的内存管理规则吗?要发布或不发布,这就是问题所在.
- -回答
正如安德斯所说,答案是"不"要发布.
我感到困惑,因为NSPropertyListSerialization类有一个方法
+ (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
Run Code Online (Sandbox Code Playgroud)
文件说如果不是零,我应该释放第三个参数.然而,它被弃用并取而代之
+ (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
并且参数现在是(NSError**).无需像其他类似方法一样发布.因此一般的内存管理规则不需要释放这种参数.
---参考文件
在Apple的高级内存管理编程指南中,您不拥有通过引用返回的对象部分:
当您调用这些方法中的任何一个时,您不会创建NSError对象,因此您不拥有它.